如果我正在处理操作/事务类型的应用程序,我发现 DDD 很自然。但是,我总是以一种合理的方式来处理报告类型的函数。
我所说的报告不限于报告生成,还包括执行相对复杂查询的函数。(例如,给出交易者所做的所有订单的摘要,或显示具有特定股票的交易账户的账户摘要等)。它们可以只是与那些操作功能一起使用的一些查询或支持功能。
对于这样的函数,如果我们可以在 SQL(或任何查询语言)中执行连接,获取我们感兴趣的列,并返回经过处理的结果集,那是很自然的。但是,DDD 似乎不太适合这种方式:我们需要一个额外的特殊存储库,或者让现有的最相关的存储库返回一个特殊的“实体/值对象”(这是专门的结果集)。这些特殊的“实体”实际上没有任何领域意义。
如果我们想利用有意义的领域层,可能会产生大量来自不同存储库的额外查找,加上领域或服务层中的大量聚合工作,这很容易导致可怕的性能下降。
我也想过为这类功能设置另一个“路径”,它不通过“DDD路径”,有自己的方式从数据库中获取报告数据,组合显示结果。然而,这会使应用程序变得不必要的复杂,更糟糕的是,我们提供了一个额外的路径,以便更习惯于传统的面向 DB 开发的开发人员可能倾向于使用这条路径,即使它不合适。
我认为这种情况很常见(通常一个大系统不会包含操作但也包含报告和查询功能),我想知道人们是如何处理它的?