8

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

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

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

例如

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

然后在我的“客户服务”中,我需要“R”我的参考数据以获取例如描述而不是 ID。那么,我应该调用 ReferenceDataService 还是 ReferenceDataRepository?

  1. 在某些层,我想从实体映射到 ViewModel。

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

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

谢谢:)

4

2 回答 2

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

另一个更简单的场景是当您不需要服务层时,这在较小的应用程序中通常是这种情况。服务层不会带来任何好处。因此控制器直接与具有域模型的存储库对话。

于 2012-07-18T09:48:38.490 回答
6

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

于 2012-07-18T09:55:29.163 回答