【问题标题】:How to best represent database views/summary info in "3-Tiered" application如何在“三层”应用程序中最好地表示数据库视图/摘要信息
【发布时间】:2012-01-19 17:42:37
【问题描述】:

这基本上是在问与How to handle views in a multilayer-application 相同的问题。但是,该帖子没有收到太多反馈。

问题出在这里:我们构建了一个具有以下层的 3 层 Web 应用程序:

-数据访问(使用存储库)
-服务
-UI (MVC 3)

DTO 在 UI(控制器)层和服务层之间传递。包含大量域级逻辑的较重域模型在服务层和数据访问层之间传递。一切都使用 IOC 解耦,应用遵循 SOLID 原则(或也尝试过)——一个快乐的解耦大家庭!

目前DTO->Domain Model和Domain Model->DTO转换都发生在服务层。

所以,最后我的问题:

我们将需要开始显示更复杂的只读信息子集(即汇总视图连接多个实体进行汇总等)。那么在 n 层系统中表示这种类型的只读数据的最佳实践是什么?在这种情况下,必须将只读域模型类型映射到 DTO 类型对我来说没有意义。在大多数情况下,无论如何,这两种类型之间没有区别。我的想法是“打破”这些只读类型的分层边界,让数据访问层直接为 DTO 提供服务,并将它们传递到服务层和 UI。

谁能指出我正确的方向?

非常感谢!

【问题讨论】:

    标签: views soa dto n-tier-architecture


    【解决方案1】:

    您关于打破分层以进行阅读然后显示值的想法完全有道理。毕竟,系统的架构/设计应该对您有所帮助,而不是相反。

    向用户显示类似报告的数据应该简单地从数据库中查询并推送到视图;没有域/dto 转换,尤其是在您使用网络应用程序时。这样做会省去很多麻烦。 就个人而言,我曾尝试通过这些映射来显示一些只读数据,但效果不佳;性能,不必要的映射,我不得不做的奇怪的事情只是为了显示某种类似报告的视图。在这种情况下,您可能会拥有域模型和读取模型。您可以查找 CQRS 模式,它可能会引导您远离想为写入和读取使用相同的数据模型。

    所以,为了回答您的问题,我相信在这种情况下,最好的方法是跳过分层并通过薄层直接从数据库中读取 DTO。

    【讨论】:

    • 非常好 - 感谢您提供指向 CQRS 的链接,这似乎正是我需要的方法!让存储库构建只读视图是有意义的。可能存在违反 SRP 的情况,因为存储库/数据库可能正在处理在组成数据形状(分组等)时可能被视为业务逻辑的内容。但是,正如您所提到的,在大多数情况下,性能和可维护性的提升可以抵消所谓的违规行为。我会投票给你,但该死的网站不会让我这样做:)
    • 我不会使用相同的存储库来查询读取数据,因为存储库应该服务器域对象。因此,您不会遇到麻烦,SRP 警察也不会逮捕您,因为您可能有不同的模型来读取不同的读取层(存储库或某种查询
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多