1

我们使用 Telerik ORM 来生成我们的领域模型,并将它们放在一个名为 DAL 的类库中。然后我们有我们的 UI 项目,它是一个 MVC 4 Web 应用程序。在这方面,我们有存储库和模型。这里的模型是视图模型,专门用于在视图上显示数据。

现在我的问题是:

  1. 存储库是否应该直接返回视图模型?
  2. 视图模型是否应该转换为实体?
  3. 使用自动映射器有什么开销?应该在哪里使用?

如果我们不使用 automapper 转换为存储库中的视图模型,我们可能会对 db 进行不同的调用来填充对象的每个部分。页面的视图模型可能具有联系人列表和选定的联系人。选定的联系人将填充一个对存储库的调用,而联系人列表将填充另一个调用。此外,如果映射器处于存储库级别,如果我们只对“名称和 ID”感兴趣,那么删除所有“额外字段”(如性别)不是更好吗?

我听说存储库不应该返回视图模型,因为视图模型是特定于 UI 的,不应该参与数据层。这是真的?

4

2 回答 2

2

您的存储库应返回纯域对象。ORM 映射器应将这些作为紧密映射到数据源的类输出。为了使您的存储库/控制器能够轻松插入各种形式,例如 Web 服务、Web 应用程序和其他项目,不应该应用任何 UI 属性。

当您针对存储库接口的多个实现(例如 DI 容器)时,Automapper 非常棒。在将域对象转换为存储类对象/从存储类对象转换时,它非常有用。基本上它减少了翻译课程的需要。

在 MVC.Model 区域,您可能需要创建您在 UI 中用作模型的域对象类的副本。随着项目的发展,您将看到这样做的优势,尤其是当您使用各种属性进行验证、显示、本地化等时。当您的类具有非常接近的命名约定时,像 Automapper 这样的工具会大大提高生产力。

如果您在 Mvc.Controller 类中使用映射器将数据/控制器转换为 MVC.Models,您还将看到生产力的提高。

关键是要与跨应用程序边界的类中的属性名称保持一致。

于 2013-03-07T23:14:48.547 回答
1

这是目前正在讨论的问题。 Jimmy Bogard的建议是使用 Automapper 仅将域模型映射到视图模型。如果您想将后视图模型过于扁平化为域模型,我建议您尝试使用Value Injecter

于 2013-03-07T22:47:40.100 回答