我有一个相当复杂的聚合,具有聚合根Order。它包含实体(例如,OrderItem),它们在聚合之外是没有意义的。但是也有一些实体应该是这个聚合的一部分,但在这个聚合之外也是有意义的(例如。ShippingMethod或Invoice)。
对于这个复杂的聚合(通过root的id加载整个聚合)有一个存储库,并且有一个用于管理可能的运输方法的CRUD存储库和另一个用于列出发票的存储库,这样做对吗?
更广泛地说,在DDD中是否可以有一个聚合,它是另一个聚合的一部分?
发布于 2013-07-18 18:41:29
你可以把“一个聚合,它是另一个聚合的一部分”看作是“一个聚合持有另一个聚合的引用”。
例如
public class Order {
private Invoice invoice;
}
<class name="Order" table="T_ORDER">
<one-to-one name="invoice" column="INVOICE_ID" />
</class>如果订单和发票在此上下文中都是聚合,那么我将拥有一个OrderRepository和一个InvoiceRepository.You,它可以使用
orderRepository.findBy(orderId)您可以使用以下命令检索发票:
invoiceRepository.findBy(invoiceId) 或
Order order = orderRepository.findBy(orderId);
Invoice invoice = order.getInvoice();有一篇关于如何设计聚合(http://dddcommunity.org/library/vernon_2011/)的著名文章建议使用身份引用来实现这种关系。
public Class Order {
private InvoiceId invoiceId;
}
<class name="Order" table="T_ORDER">
<component name="invoiceId">
<property name="value" column="INVOICE_ID" />
</component>
</class>可以使用以下命令检索订单
orderRepository.findBy(orderId)您可以使用以下命令检索发票:
invoiceRepository.findBy(invoiceId) 或
Order order = orderRepository.findBy(orderId);
Invoice invoice = invoiceRepository.findBy(order.getInvoiceId()); https://stackoverflow.com/questions/17720040
复制相似问题