asp.net mvc3,我应该把我的代码放在哪一层?

时间:2012-05-17 14:47:37

标签: asp.net-mvc asp.net-mvc-3 repository-pattern service-layer

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

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

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

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

以上代码,我应该把它们放在哪里? webui,repoistory或服务层。

2 个答案:

答案 0 :(得分:2)

您只能从请求中获取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();
}

用户实体可以存在于另一层,您的UserRegisterViewModel将存在于MVC UI层中。拥有一个表示视图中数据的ViewModel和另一个代表您的User实体的图层中的完全独立的类是完全正常的。这是个好设计。您的用户实体可以位于ServiceLayer中,并具有与之关联的业务规则。然后该类将调用您的存储库层以保存其数据。

我同意Leon Cullens,CreateDate应该存在于User实体中,这就是为什么你没有看到我设置它。 User实体应该处理它自己的调用RepositoryLayer的CRUD操作。在ctor或更好的地方设置CreateDate,有一个基类,其中包含用户将在内部使用的CreateDate,CreatedBy,LastUpdateDate,LastUpdatedBy。

答案 1 :(得分:2)

我会在'User'实体的构造函数中添加'CreatedDate',并在接收ViewModel对象的控制器中添加IP地址。

我不知道你的情况:你可以使用AutoMapper将ViewModel映射到实体。