【发布时间】:2013-11-25 10:12:00
【问题描述】:
存储库模式建议您只能提取聚合根。但是,如果您不知道它是父(根),您将如何仅使用它的唯一身份(Child.ID)来检索一个孩子?
class Parent
{
public int ID { get; set; }
IEnumerable<Child> Children { get; private set; }
}
class Child
{
public int ID { get; private set; }
public virtual Parent Parent { get; private set; } // Navigational model
}
我的应用程序是无状态的(web),为简单起见,请求只包含孩子的 ID。
我正在考虑三种方法:
- 打电话给所有的父母,然后礼貌地问他们谁拥有这个孩子。
- 在 ParentRepository 中有一个名为 getGetChildByID 的特殊例程,这有点使存储库的抽象失败。
- 修改请求以包含父级,但似乎没有必要,因为您已经拥有唯一身份。
【问题讨论】:
-
在
ChildRepository类中创建GetChildByID(..)方法? -
如果您可以在没有父母的情况下识别他们,那么孩子应该是一个聚合体。
-
@Hippoom 我对Aggregate Root的了解是有限的,你是说一个实体只要有唯一的身份就可以被认为是一个根?我已经更新了代码示例。
-
如果领域专家想要单独跟踪实体,则该实体应该是一个聚合。例如,假设领域专家不会在没有 Order 的情况下跟踪订单行,那么 Order 是一个聚合但 orderLine 只是一个本地实体。即使在技术上,我们也给 orderLine 一个唯一的 id。
-
@Hippoom +1 我想你已经一针见血了。这个孩子可能是一个有界上下文中的聚合根和另一个上下文中的值对象。
标签: c# domain-driven-design repository-pattern ddd-repositories aggregateroot