【发布时间】:2013-01-20 22:30:52
【问题描述】:
如果您遵循存储库模式,他们...说为每个根聚合实体创建一个存储库。
这意味着当我有这个模型时:
客户有订单 订单有产品 产品有供应商
等等……
这意味着我有 4 个存储库,它们被放入一个存储库中。客户是根实体。
我是不是误会了什么?
【问题讨论】:
标签: domain-driven-design repository-pattern aggregateroot
如果您遵循存储库模式,他们...说为每个根聚合实体创建一个存储库。
这意味着当我有这个模型时:
客户有订单 订单有产品 产品有供应商
等等……
这意味着我有 4 个存储库,它们被放入一个存储库中。客户是根实体。
我是不是误会了什么?
【问题讨论】:
标签: domain-driven-design repository-pattern aggregateroot
每个聚合都应该有一个存储库是正确的。但是,可能会有所不同的是您域中的聚合集。客户/订单/产品/供应商模型可以通过多种方式分解为聚合。分解为聚合取决于多种因素,并取决于手头的领域。
聚合应该是一个一致性边界,这意味着它定义了哪些实体集在与这些实体关联的行为的上下文中应该是一致的。鉴于此约束,应消除聚合之间的对象引用并用身份引用替换。
在您的模型中,客户、订单、产品和供应商可能是不同的聚合体,因此需要单独的存储库。即使客户是聚合根(客户聚合的一部分)并且订单取决于客户,但这并不意味着客户存储库应该包含订单存储库。订单存储库应该是完全独立的,因为订单是订单聚合的根。
查看Effective Aggregate Design by Vaughn Vernon,深入了解如何设计聚合。
【讨论】:
如上所述,您有 4 个相关实体,并且存储库为所有这些相关实体实现事务上下文。
【讨论】: