gpt4 book ai didi

oop - 为什么存储库仅用于领域驱动设计中的聚合?

转载 作者:行者123 更新时间:2023-12-04 13:36:44 25 4
gpt4 key购买 nike

在 DDD 中,存储库用于执行聚合的序列化和反序列化,例如通过读取和写入数据库。这样,聚合可以包含更纯粹的业务逻辑,并且不会耦合到非特定领域的持久性策略。

但是,我想知道为什么存储库总是被描述为专门用于聚合。将它用于所有实体不是同样有动力吗?

(如果这只是一个事实,即所有普通实体都可以被视为具有零个 child 的聚合根,请通知我,这个问题可以被埋没。)

最佳答案

I wonder why repositories are always described as being used for aggregates specifically. Isn't it equally motivated to use it for all entities?



因为聚合是暴露给应用层的一致性边界。

也就是说,是的,存储库负责从数据存储中获取状态快照,并从中构建构成聚合的实体和值的图。

存储库的 API 只公开一个聚合根,因为它定义了一致性边界。我们不让应用程序到达图中的任意位置并进行更改,而是强制应用程序与根对象进行独占通信。有了这个约束,我们只需要查看一个地方以确保所有更改都满足业务不变量。

因此,无需为模型中的每种类型的实体开发存储库,因为不允许应用程序直接与模型进行交互。

换句话说,聚合中的实体是私有(private)数据结构。我们不允许客户端代码直接操作实体,原因与我们不实现允许客户端通过 api 并直接操作指针的列表相同。

,您确实会看到用于聚合以外的事物的“存储库”——存储库也可用于查找模型状态的缓存 View 。诀窍是 View 不支持修改。在 Evans 描述的方法中,每个实体都有一个单一的表示来履行其所有角色。在 CQRS 中,实体在每个角色中可能有不同的表示,但通常只有一个角色支持修改实体。

关于oop - 为什么存储库仅用于领域驱动设计中的聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46452051/

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