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

时间:2012-07-18 09:45:40

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

我没有MVC应用程序,“M”包括服务和存储库层。

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

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

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

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

    1. 在某个图层我想从实体映射到ViewModel。
    2. 我是在服务层或控制器中执行此操作吗?

      e.g。我的ServiceLayer是否执行从VM到Entity的映射/逻辑并返回?

      感谢:)

2 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:5)

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