我对利用CQRS&amp ;;的环境中实体的起源感到有些困惑。活动采购。为了使我的问题清楚,请使用以下众所周知的网上商店示例:
您可以将订单建模为聚合根。订单接受订单行,订单行本身由产品和数量定义。
由于订单行是在订单处理过程中构建的实体,因此产品的概念似乎也是一个实体。但产品甚至产品目录来自哪里?在我看来,在订单的有限上下文中没有像产品聚合根这样的东西。那么订单背景如何知道产品实体呢?它们是否在另一个有界的上下文中维护,并以某种方式在订单上下文的读取存储中实现?
答案 0 :(得分:3)
在包含Order
的BC中,Product
作为OrderLine
的一部分,可能确实是一个值对象,由ProductId
等值组成},Name
等。
订单上下文不需要了解产品实体,因为订单行通常只包含简单的仅限价值的属性(productId / SKU,名称,数量和每个/项目的价格)。因此,Order
可以提供诸如
void addOrderLine(ProductId productId, String productName, BigDecimal pricePerItem, int quantity).
它实际上与"订单" -BC无关,其中productId
,productName
等的这些值来自。
让UI协调这些BC很常见:
AddToShoppingBasketCommand(productId, productName, quantity, price)
等命令。
PlaceOrderCommand
。PlaceOrderCommand
的命令处理程序获取当前购物篮并构造相应的Order
;对于每种产品,它所需要的只是已经在购物篮中列出的产品的相应属性(最初位于AddToShoppingBasketCommand
)。请注意,它不需要了解Product-BC中Product
实体的概念。