控制器 - >服务 - >存储库:服务是否将实体映射到ViewModel?

Blu*_*ppy 8 service repository-pattern asp.net-mvc-3

我没有MVC应用程序,"M"包括服务和存储库层.

但是,我对于在哪里以及如何做一些事情感到有点困惑.

  1. 一个服务调用两个存储库,或调用它自己的存储库和另一个服务

例如

我有一个ReferenceDataService,它使用我的引用表处理CRUD的所有逻辑.

然后在我的"CustomerService"中,我需要'R'我的参考数据来获得例如描述而不是Id.那么,我应该调用ReferenceDataService还是ReferenceDataRepository?

  1. 在某个层,我想从Entity映射到ViewModel.

我是在服务层或控制器中执行此操作吗?

例如,我的ServiceLayer是否执行从VM到实体的映射/逻辑并返回?

谢谢:)

Dar*_*rov 24

  • 存储库与基础数据源通信.
  • 服务层与具有域模型的存储库进行通信.它将域模型从/向存储库层传递/传递.
  • 控制器与服务层对话.控制器从/向服务层接收/传递域模型.
  • 控制器调用映射层(如果有)以在域模型和视图模型之间进行映射.如果你没有映射层,你可以在你的控制器中进行映射,虽然这很快就会变得很麻烦,在这种情况下,AutoMapper可以作为一个非常方便的映射层.

另一个更简单的方案是,当您不需要服务层时,通常在较小的应用程序中就是这种情况.服务层没有任何好处.因此,控制器使用域模型直接与存储库进行通信.


Ser*_*kiy 5

ViewModel包含在视图上显示模型所需的数据.如果您将使用其他视图(例如移动应用程序,桌面应用程序,甚至Web服务),您将需要在视图上显示其他数据.如果您要在服务层上进行映射,那么您将无法将其用于其他类型的应用程序.因此,控制器是您映射域数据以在视图上显示它们的地方(您拥有的任何类型的视图).