1

我正在使用 asp.net mvc3 构建一个应用程序。我在这个项目中添加了两个层,存储库和服务层。我的一些代码,我不确定我应该把它们放在哪一层。

在我的注册页面上,要创建一个帐户,我只要求用户输入他们的电子邮件和密码,它使用 UserRegisterViewModel。在我将它添加到数据库之前,我的用户表需要更多信息。

我需要从 UserRegisterViewModel 创建一个用户实体:

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

所以上面的代码,我应该把它们放在哪里?webui、repository 或服务层。

4

2 回答 2

2

您只能从请求中获取 IP 地址,因此您可以在 Action 中“获取”它

像这样的东西

[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 实体中,这就是为什么你看不到我设置它的原因。用户实体应该处理它自己的调用您的 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 回答