这基本上是在How to handle views in a multilayer-application中提出同样的问题。但是,该帖子没有收到太多反馈。
问题在于:我们已经构建了一个包含以下层的3层Web应用程序:
- 数据访问(使用存储库)
- 服务
-UI(MVC 3)
DTO在UI(控制器)层和服务层之间传递。包含大量域级逻辑的较重域模型在服务和数据访问层之间传递。使用IOC解决所有问题,应用程序遵循SOLID主体(或尝试) - 一个非常快乐的脱离家庭!
目前,DTO->域模型和域模型 - > DTO转换都在服务层中进行。
所以,最后我的问题:
我们将需要开始显示更复杂的只读信息子集(即,汇总多个实体的汇总视图执行汇总总计等)。那么在n层系统中表示这种类型的只读数据的最佳实践是什么?在这种情况下,必须将只读域模型类型映射到DTO类型对我来说没有意义。在大多数情况下,无论如何,两种类型之间没有区别。我的想法是“打破”这些只读类型的分层边界,让数据访问层直接提供DTO并将它们传递到服务层并传递给UI。
有人能指出我正确的方向吗?
非常感谢!
答案 0 :(得分:1)
您打破分层阅读然后显示值的想法完全有意义。毕竟,系统的架构/设计应该对您有所帮助,而不是相反。
只需从数据库中查询向用户显示类似报表的数据并将其推送到视图;没有域/ dto转换,特别是如果你在网络应用程序中。这样做可以省去很多麻烦。 就个人而言,我曾试图通过这些映射来显示一些只读数据而且效果不佳;性能,不必要的映射,我必须做的奇怪的事情只是为了显示某种类似报告的视图。在这种情况下,您可能会拥有域模型和读取模型。您可以查找CQRS模式,它可能会引导您远离以为您想要使用相同的数据模型进行写入和读取。
所以,为了回答你的问题,我相信在这种情况下,最好的方法是跳过分层并通过薄层直接从数据库中读取DTO。