1

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

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

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

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

所以上面的代码,我应该在哪里放呢? webui,repoistory或服务层。

回答

2

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

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

+0

谢谢,我会尝试automapper,但是当我在User和UserRegisterViewModel之间进行映射时,我应该在哪里做? Web UI层,域层或服务层? – qinking126

+0

在您的Controller中,这可能是Web UI层:)请记住,您应该只初始化一次AutoMapper映射,以便在应用程序启动时引导它们。然后你只需要在你的控制器中做到这一点:Mapper.Map (userobject);您还可以通过将Map作为第二个参数传递给Map()函数来映射到现有实体。 –

2

您只能让你有在行动“得到”它有

像这样的事情

[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(); 
} 

用户实体可以住在另一层得到请求的IP地址,你的UserRegisterViewModel将生活在MVC UI层。具有表示视图中数据的ViewModel以及代表您的用户实体的另一图层中的完全独立的类是非常正常的。这是很好的设计。您的用户实体可以位于ServiceLayer中,并具有与之关联的业务规则。然后该类将调用到您的存储库层以保存其数据。

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

相关问题