【发布时间】:2016-03-07 21:46:56
【问题描述】:
不太清楚如何解决这个关于 DDD 的问题。
假设您有 2 个域:
-
Product域负责创建新的和管理一个人创建的现有Products。Product Aggregate Root - 一个
Store域,负责将所有创建的Products分配给给定的Store以进行销售,以及其他内容。但是Store也可以创建新的Products,这些Products将分配给自己,但也可用于其他Stores,以便他们可以将Product分配给自己。Store Aggregate Root
Product 可以在不属于Store 的情况下存在。 Store 可以在没有任何 Products 的情况下存在(我知道这没有任何意义,但这只是我正在处理的复杂解决方案的一个简单示例。)
所以当Person 出现在系统中时,它们可以从任一端开始。他们可以从创建新的Products 开始,也可以从添加新的Store 开始。
这里是复杂的地方,当他们创建一个新的Store 时,他们可以选择添加现有的Products,或者他们可以创建一个新的Product 并将其添加到Store。
您如何处理这个用例。是Store 是否对CreateNewProduct 有行为,它负责设置新的Product,然后将其添加到Store。还是您只是在Store 域之外创建一个新的Product 作为Product 域的一部分,然后将Store 告诉AddProduct / AddExistingProduct?
更新:这样的事情是否适合作为Domain Service
public class StoreProductService {
public Store CreateNewStoreProduct (Store store, string sku, string name, etc){
Product newProduct = ProductFactory.CreateNewProduct(sku, name, etc);
store.AddProduct(newProduct);
return store;
}
}
【问题讨论】:
-
您需要第三个域,它应该充当门面模式。所以第三个域的工作是创建商店或产品或将它们关联在一起。门面模式将通过提供更简单的接口来访问产品和商店域,帮助您隐藏系统的复杂性,
-
我和 adeel 在一起;您需要第三个概念 -
ProductFactory或类似的。产品不会自己创造,商店也不会创造产品——它们只是包含它们。 -
是的,我有一个
ProductFactory,它为我创建了一个新产品。但是你是否让StoreAddProduct(product)或 CreateNewProduct(sku, name, etc). Which means that theStore` 实体需要知道ProductFactory。所以很明显,您将拥有一个Store应用程序服务来处理添加新产品。那么在该创建方法中,您是否使用ProductFactory并在创建后将其传递给商店? -
@StephenByrne - 见上面的评论
-
您是否将“域”与“聚合”混淆了?
标签: domain-driven-design aggregateroot bounded-contexts