1

asp.net mvc3 を使用してアプリケーションを構築しています。このプロジェクトに、リポジトリとサービス レイヤーの 2 つのレイヤーを追加しました。私のコードのいくつかは、どのレイヤーに配置すればよいかわかりません。

私の登録ページでは、アカウントを作成するために、UserRegisterViewModel を使用して、ユーザーに電子メールとパスワードを入力するように求めるだけです。データベースに追加する前に、ユーザー テーブルにさらに情報が必要です。

UserRegisterViewModel から User エンティティを作成する必要があります。

user.ip= "1.1.1.1";
user.createddate="11/11/1911";
....

上記のコードでは、どこに配置すればよいですか? webui、リポジトリ、またはサービス レイヤー。

4

2 に答える 2

2

リクエストからのみIPアドレスを取得できるため、アクションでIPアドレスを「取得」します

このようなもの

[HttpPost]
public ActionResult Login(UserRegisterViewModel model) {
    if(ModelState.IsValid) {
        SaveLogonToAudit(model.Username);
    }
    return View(model);
}

private void SaveLogonToAudit(string username) {
    var user = new UserAccount(username, Request.Browser.Browser, Request.Browser.Type, Request.UserHostAddress);
    user.Save();
}

User エンティティは別のレイヤーに存在する可能性があり、UserRegisterViewModel は MVC UI レイヤーに存在します。ビュー内のデータを表す ViewModel と、ユーザー エンティティを表す別のレイヤー内の完全に別のクラスを持つことは、まったく普通のことです。いいデザインですね。User エンティティは ServiceLayer に配置でき、ビジネス ルールを関連付けることができます。次に、そのクラスがリポジトリ レイヤーを呼び出して、そのデータを保存します。

私は Leon Cullens に同意します。CreateDate は User エンティティに存在する必要があります。そのため、私はそれを設定していません。User エンティティは、RepositoryLayer を呼び出す独自の CRUD アクションを処理する必要があります。ctor で CreateDate を設定するか、さらに良いことに、ユーザーが内部で使用する CreateDate、CreatedBy、LastUpdateDate、LastUpdatedBy を持つ基本クラスを用意します。

于 2012-05-17T14:56:52.193 に答える
2

「ユーザー」エンティティのコンストラクターに「CreatedDate」を追加し、ViewModel オブジェクトを受け取るコントローラーに IP アドレスを追加します。

あなたが知らなかった場合: AutoMapperを使用して ViewModels を Entities にマップできます。

于 2012-05-17T15:17:47.600 に答える