Asp.net mvc asp.net mvc3,我应该将代码放在哪一层?

Asp.net mvc asp.net mvc3,我应该将代码放在哪一层?,asp.net-mvc,asp.net-mvc-3,repository-pattern,service-layer,Asp.net Mvc,Asp.net Mvc 3,Repository Pattern,Service Layer,我正在使用asp.net mvc3构建一个应用程序。我在这个项目中添加了两层,存储库和服务层。我的一些代码,我不确定我应该把它们放在哪一层 在我的注册页面上,要创建一个帐户,我只要求用户输入他们的电子邮件和密码,它使用的是UserRegisterViewModel。在将其添加到数据库之前,我的用户表需要更多信息 我需要从UserRegisterViewModel创建一个用户实体: user.ip= "1.1.1.1"; user.createddate="11/11/1911"; .... 那

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

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

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

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

那么上面的代码,我应该把它们放在哪里呢?webui、repoistory或服务层。

您只能从请求中获取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,在另一个表示用户实体的层中有一个完全独立的类,这是非常正常的。这是个好设计。您的用户实体可以位于ServiceLayer中,并具有与其关联的业务规则。然后,该类将调用存储库层来保存其数据


我同意Leon Cullens的观点,CreateDate应该存在于用户实体中,这就是为什么你看不到我设置它的原因。用户实体应该处理自己的CRUD操作,这些操作调用您的RepositoryLayer。在ctor中设置CreateDate,或者更好的方法是,创建一个基类,该基类包含CreateDate、CreatedBy、LastUpdateDate、LastUpdateBy,用户将在内部使用这些基类。

您只能从请求中获取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,在另一个表示用户实体的层中有一个完全独立的类,这是非常正常的。这是个好设计。您的用户实体可以位于ServiceLayer中,并具有与其关联的业务规则。然后,该类将调用存储库层来保存其数据


我同意Leon Cullens的观点,CreateDate应该存在于用户实体中,这就是为什么你看不到我设置它的原因。用户实体应该处理自己的CRUD操作,这些操作调用您的RepositoryLayer。在ctor中设置CreateDate,或者更好,拥有一个基类,该基类具有CreateDate、CreatedBy、LastUpdateDate、LastUpdateBy,用户将在内部使用。

我将在“用户”实体的构造函数中添加“CreateDate”,并在接收ViewModel对象的控制器中添加IP地址


如果您不知道,可以使用将ViewModels映射到实体。

我会在“用户”实体的构造函数中添加“CreatedDate”,并在接收ViewModel对象的控制器中添加IP地址


我想您可能不知道:您可以使用将ViewModels映射到实体。

谢谢,我将尝试automapper,但是当我在User和UserRegisterViewModel之间映射时,我应该在哪里进行映射?web ui层、域层或服务层?在您的控制器中,这可能就是web ui层:)请记住,您应该只初始化自动映射一次,因此在应用程序启动时引导它们。然后您只需要在控制器中执行此操作:Mapper.Map(userobject);您还可以通过将该实体作为第二个参数传递给map()函数来映射到现有实体。谢谢,我将尝试automapper,但是当我在User和UserRegisterViewModel之间映射时,我应该在哪里进行映射?web ui层、域层或服务层?在您的控制器中,这可能就是web ui层:)请记住,您应该只初始化自动映射一次,因此在应用程序启动时引导它们。然后您只需要在控制器中执行此操作:Mapper.Map(userobject);还可以通过将现有实体作为第二个参数传递给map()函数,将其映射到现有实体。