代码之家  ›  专栏  ›  技术社区  ›  Stephen L.

轻量级聚合和存储库

  •  1
  • Stephen L.  · 技术社区  · 12 年前

    假设我们有两个简单的域对象: 主题(实体)->消息(值对象)

    根据DDD原则,这两个域对象可以包含在一个集合中。

    但在某些情况下,我们需要检索没有消息的主题(如果需要只显示主题列表),有时我们需要检索带有消息的主题。

    设计这个简单案例的最佳方法是什么?提前感谢。

    1 回复  |  直到 12 年前
        1
  •  0
  •   eternity    12 年前

    我建议您将域逻辑与演示所需的数据分开。类似于命令查询分离(CQS)或命令查询责任分离(CQRS)。例如,如果有人向主题添加了新消息,您可以创建一个适当的命令,并将其作为域逻辑的一部分进行处理。如果您需要在用户界面中显示一些数据,您可以通过DTO(数据传输对象)选择真正需要的数据。此解决方案避免了不必要的数据检索,并有助于保持简单性。您只检索真正需要的数据。

    如果此解决方案导致项目发生大量变化,您可以在存储库中创建一个额外的方法,该方法将返回聚合的轻量级版本(带有消息集合的默认存根)。但这种解决方案有一个缺点——您需要记住,这种方法返回的数据不完整。

    推荐文章