如何在DDD中使用实体持久/恢复聚合根?

Mar*_*tin 4 persistence domain-driven-design aggregate ddd-repositories aggregateroot

基于域驱动设计的以下定义:处理软件核心的复杂性,

聚合是:关联对象的群集,出于数据更改的目的,这些对象被视为一个单元。外部引用仅限于AGGREGATE的一个成员,称为根。一组一致性规则适用于AGGREGATE的边界。

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

我的存储库如何保留并恢复此私有数据?


编辑:

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

订单是聚合根。

它的行是实体。

由于聚合根(订单)是唯一允许保存对其实体(订单行)的引用的对象,因此我不知道如何持久存储库中的订单行。

小智 5

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

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

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

也许您可能还会研究CQRS +事件源,它为持久化实体提供了另一种方法。