如何在ASP.NET MVC中将复杂的ViewModel传递给服务层?

Eld*_*dar 6 asp.net-mvc service-layer

假设我有用于用户注册的RegisterModel和一些实现IUserService的UserService

public interface IUserService
{
   User CreateUser(User newUser);
}


[HttpPost]
public ActionResult Register(RegisterModel model)
{
            if (ModelState.IsValid)
            {

                // ... logic for newuser

                User user = _userService.CreateUser(newuser);

               _authenticationService.SetAuthenticatedUser(user);

                return RedirectToRoute("Homepage");
            }

            return View(model);
        }
Run Code Online (Sandbox Code Playgroud)

鉴于RegisterModel可能非常复杂,逻辑应该用于将RegisterModel映射到User对象

Dar*_*rov 15

您永远不会将视图模型传递给服务.服务甚至不知道您可能已在GUI(ASP.NET MVC)层中定义的视图模型的存在.服务适用于域模型.我个人使用AutoMapper在视图模型和模型之间进行映射,反之亦然,因此这个逻辑进入映射层.

  • @eldar,我认为两种方法都很好.顺便说一句,对我来说EF模型不应该被视为模型(除非你使用Code First方法)=>那些只是由辅助数据库传输对象自动生成,这些对象应该进入CRUD存储库而不是服务,因为它们经常被污染/与您正在使用的特定数据访问技术相关(本例中为EF). (2认同)