gpt4 book ai didi

domain-driven-design - CQRS/DDD 如何使用命令将对象添加到聚合中?

转载 作者:行者123 更新时间:2023-12-04 08:22:18 25 4
gpt4 key购买 nike

我对 CQRS/DDD 很陌生,所以我的理解可能有很大的漏洞。

但是让我们假设我有一个聚合对象,Widget . WidgetNote 组成对象和 Note对象可以有 File附在他们身上的物体。

在 CQRS 中,我可能有一个名为 AddNoteToWidget 的命令.我从阅读中知道命令和事件对象都应该是简单的 DTO(我知道它们也可以有其他形式,但关键是它们不包含任何行为)。

我也明白实体不应该包含对存储库的引用,因为它们应该不知道持久性。

我的 AddNoteToWidget包含对 File 的引用对象并与命令一起序列化?如果是这种情况,那么我的 File对象应该是一个值对象。但是,我将它建模为一个拥有自己存储库的实体,因为我希望在整个系统中拥有一致的中央文件存储。

最佳答案

从阅读您的问题以及对它的评论来看,很明显 您目前正在治疗 File作为子实体和聚合根 .这是一个问题,您应该决定以下两者之一:

  • 型号 File作为一个集合。现在只有File的ID必须在该聚合之外使用,绝不是 File本身。另外,File对象通过它们自己的存储库检索。
  • 型号 File作为 Widget 中的实体总计的。这意味着只要您有 Widget,就可以随时使用该文件。 . File对象没有自己的存储库,它们与 Widget 一起加载通过 WidgetRepository .

  • 在你的情况下,我无法从你的问题中看出两者中的哪一个更好。作为准则,聚合边界是一致性边界,并且聚合始终以原子方式持久化。一个应用服务应该只修改一个聚合。

    我认为您目前遇到的主要问题可以总结如下:

    Repositories handle only whole Aggregates, never single Entities that are part of an Aggregate.



    当然,也可能存在仅由一个实体组成的简单聚合,在这种情况下,实体和聚合是相同的。

    关于domain-driven-design - CQRS/DDD 如何使用命令将对象添加到聚合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33389349/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com