我有一个相当简单的域名,确定了大约7-8个主要实体,这些可能是他们自己的聚合根。但是会有一个UI屏幕,它将列出系统中所有对象的并集,这意味着所有聚合的联合。
我想到的一种方法是使用组合,即所有其他聚合根引用的元数据聚合,这将是一个独立的实体。因此,对于此屏幕,我可以查询此聚合,我移动到此新聚合的字段是需要在“所有对象”网格中显示的公共字段。
另一种方法可能是拥有一个应用程序服务方法,通过查询其他存储库并在应用程序层合并列表以及处理分页等来为“所有对象”屏幕构建必要的列表。
我对第一个解决方案感到不安,因为我可以看到影响我的UI用例 域设计但db执行处理分页,合并列表等的繁琐工作 并且没有联接所有这些信息通过一个简单的查询收集。
第二种解决方案虽然看起来更整洁,却在易用性和性能上失去了作用。
请告知。
答案 0 :(得分:1)
在这种情况下,我建议使用read-models,它们本质上是值对象或专门用于读取场景的DTO。使用读取模型是保持实体和AR清洁的模式。至于如何创建读取模型,基本上如您所述,您有两个选项。一种是让一个存储库返回一个满足给定视图要求的读取模型。这将允许您利用数据库来提高性能。另一种选择是在应用程序服务级别或表示层事件处从多个存储库或服务组成读取模型。这种方法更具可扩展性,因为数据不必来自同一数据源。