Domain driven design 我应该通过聚合根存储库模式DDD对子聚合进行CRUD吗

Domain driven design 我应该通过聚合根存储库模式DDD对子聚合进行CRUD吗,domain-driven-design,ddd-repositories,aggregateroot,Domain Driven Design,Ddd Repositories,Aggregateroot,我读了一些文章,看了一些教程来更新我的DD知识,他们都提到我们应该只为聚合根实体构建存储库,这对我来说非常有意义 例如,如果我们有产品和变体实体,那么在这种情况下,产品是聚合根,因此回购应该只针对产品实体。 如果我们想对变体进行CRUD,我们应该通过产品回购进行CRUD。 这是有道理的,因为没有产品,变体就没有意义 现在,在系统的“管理”部分,我们需要一个管理页面,仅用于变体,以允许管理员添加/编辑变体,而这与任何产品都无关。 例如,管理员需要添加如下变体: -颜色:红色 -尺码:XL - ..

我读了一些文章,看了一些教程来更新我的DD知识,他们都提到我们应该只为聚合根实体构建存储库,这对我来说非常有意义

例如,如果我们有产品和变体实体,那么在这种情况下,产品是聚合根,因此回购应该只针对产品实体。
如果我们想对变体进行CRUD,我们应该通过产品回购进行CRUD。
这是有道理的,因为没有产品,变体就没有意义

现在,在系统的“管理”部分,我们需要一个管理页面,仅用于变体,以允许管理员添加/编辑变体,而这与任何产品都无关。
例如,管理员需要添加如下变体:
-颜色:红色
-尺码:XL - ..

之后,在创建产品时,他们可以将这些变体附加到新产品上

我的问题:
对于此管理页后端
-其逻辑是否应通过产品回购继续访问变体?
-或者我们应该有另一个单独的聚合,将变体作为根吗?
-还是我们应该打破规则,为具有聚合根产品的聚合变体创建回购协议


这个例子可能很简单,但实际上,在我们的系统中,有许多实体具有与变量相同的情况,例如股票、变量,。。而且它们都需要与变体相同的管理页面。

如果产品聚合的不同实例需要共享关于特定
变体的数据,则需要在
产品聚合之外考虑
变体

因此,您通常会发现您有一个产品存储库,其中产品可能包含对变体标识符的引用,必要时可以使用该标识符查找变体

产品中需要(其变体的过期副本)状态的方法通常在方法签名中具有“域服务”参数;域服务将具有接受变量标识符作为参数并返回该数据的最新副本的方法


变体集合的管理通常在不参考产品的情况下完成。

管理后端将是一个单独的有界上下文,在这里您可能不必使用DDD,一个简单的CRUD应用程序将do@wolverine是的,你是对的,我认为这是正确的答案,有时我们在阅读某个主题时会发生这种情况,而你却完全忘记了在这个主题之外还有一个世界concept@AmrElgarhy感觉有两个有界上下文-变量是管理后端中的实体-但作为值对象添加到product@ChrisMoutray是的,对我来说也很有意义