0

我有一个相当简单的域,确定了大约 7-8 个主要实体,这些可能是它们自己的聚合根。但是会有一个 UI 屏幕列出系统中所有对象的联合,这意味着所有聚合的联合。

我想到的一种方法是使用组合,即所有其他聚合根引用的元数据聚合,这将是一个独立的实体。所以对于这个屏幕,我可以查询这个聚合,我移动到这个新聚合的字段是需要在我的“所有对象”网格中显示的公共字段。

另一种方法可能是使用应用程序服务方法,通过查询其他存储库并在应用程序层合并列表并处理分页等,为“所有对象”屏幕构建必要的列表。

我对第一个解决方案感到不安,因为我可以看到一个 UI 用例影响了我的域设计,但是 db 完成了处理分页、合并列表等繁重的工作,并且没有连接所有这些信息是由一个简单的查询收集的.

第二种解决方案虽然看起来更整洁,但在易用性和性能方面有所下降。

请指教。

4

1 回答 1

1

在这种情况下,我建议使用读取模型,它们本质上是专门用于读取场景的值对象或 DTO。使用读取模型是保持实体和 AR 清洁的一种模式。至于如何创建读取模型,您基本上有两个选项,如您所描述的。一种是让一个存储库返回一个满足给定视图要求的读取模型。这将允许您利用数据库来提高性能。另一种选择是在应用程序服务级别或表示层的事件中组合来自多个存储库或服务的读取模型。这种方法更具可扩展性,因为数据不必来自同一个数据源。

于 2012-06-12T19:12:39.033 回答