5

基于领域驱动设计中的以下定义:解决软件核心的复杂性,

聚合是:为了数据更改而将其视为一个单元的一组关联对象。外部引用仅限于 AGGREGATE 的一个成员,指定为根。一组一致性规则适用于 AGGREGATE 的边界。

我不认为聚合根应该包含对存储库的引用。由于聚合根是唯一应该持有对其实体和聚合的引用的根,它们应该是私有的。

我的存储库如何保留和恢复这些私有数据?


编辑:

让我们以经典的 Order、OrderLines 为例。

订单是聚合根。

它的线条是实体。

由于聚合根(订单)是唯一允许保存对其实体(订单行)的引用的对象,我不明白如何从存储库中保留订单行。

4

2 回答 2

5

据我了解聚合根,它必须是访问其范围内所有实体的地方。这意味着,只要使用传统的 ORM,您就可以通过 Order 访问 OrderLines。

此外,不禁止任何人获取对根内实体的引用,但这些引用必须是易变的(即短暂的),并且您必须通过聚合根获得重新引用。

就 DDD 而言,您将使用存储库来隐藏数据访问,工厂可能反过来使用工厂来组装对象。工厂非常了解对象的内部结构,并且必须能够构建一个新对象或从存储库移交的数据中恢复一个对象。

也许您还可以研究 CQRS + Event Sourcing,它提供了一种不同的方法来持久化实体。

于 2011-08-09T06:32:47.773 回答
0

好吧,大多数人认为存储库是 hte 聚合根的逻辑特征(因为在传统 DDD 中每个聚合只有一个),所以它确实应该可以访问订单线。

但是,如果您真的希望它们是私有的,则需要求助于反射,或者让聚合根实体以某种持久的方式返回它们(可能带有某种内部调用)。

于 2011-02-28T21:04:54.340 回答