假设我们有两个简单的域对象: 主题(实体) - >消息(值对象)
根据DDD原则,这两个域对象可以包含在一个聚合中。
但在某些情况下,我们需要检索没有消息的主题(如果只想显示主题列表),有时我们需要通过消息检索主题。
设计这个简单案例的最佳方法是什么?提前谢谢。
答案 0 :(得分:0)
我建议您将域逻辑与演示所需的数据分开。像命令查询分离(CQS)或命令查询责任隔离(CQRS)之类的东西。例如,如果有人向主题添加了新消息,则可以创建适当的命令并将其作为域逻辑的一部分进行处理。如果您需要在用户界面中显示某些数据,则只需通过DTO(数据传输对象)选择您真正需要的数据。该解决方案避免了无关数据检索,并有助于保持简单性。您只检索您真正需要的数据。
如果此解决方案在项目中导致大量更改,则可以在存储库中创建另一个方法,该方法返回聚合的轻量级版本(使用Messages集合的默认存根)。但是这个解决方案有一个缺点 - 你需要记住这个方法返回不完整的数据。