Не совсем уверен, как подойти к этой проблеме в отношении DDD.
Допустим, у вас есть 2 домена:
- Домен
Product
, который отвечает за создание новых и управление существующими доменамиProducts
, созданными пользователем.Product Aggregate Root
- Домен
Store
, который отвечает за назначение всех созданныхProducts
данномуStore
для продажи и другие вещи. НоStore
также может создавать новыеProducts
, которые будут назначены им самим, но также доступны для другихStores
, чтобы они могли назначитьProduct
себе.Store Aggregate Root
Product
может существовать без принадлежности к Store
. Store
может существовать без какого-либо Products
(знаю, это не имеет смысла, но это всего лишь простой пример сложного решения, над которым я работаю в банкомате).
Поэтому, когда в систему входит Person
, они могут начать с любого конца. Они могут начать с создания нового Products
или с добавления нового Store
.
Вот где все усложняется, когда они создают новый Store
, им предоставляется возможность добавить существующий Products
или они могут создать новый Product
и добавить его к Store
.
Как вы справляетесь с этим вариантом использования. есть ли у Store
поведение по отношению к CreateNewProduct
, где он отвечает за настройку нового Product
и последующее добавление его в Store
. Или вы просто создаете новый Product
за пределами домена Store
как часть домена 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;
}
}
ProductFactory
или что-то подобное. Продукты не создают сами себя, а Магазины не создают Продукты — они просто содержат их. - person Stephen Byrne   schedule 08.03.2016ProductFactory
, который создает для меня новый продукт. Но вы тогда позволитеStore
AddProduct(product)
или CreateNewProduct (артикул, имя и т. д.). Which means that the
Store` Сущность должна будет знать оProductFactory
. Таким образом, очевидно, что у вас будетStore
служба приложений, которая занимается добавлением нового продукта. Итак, в этом методе создания вы используетеProductFactory
и передаете его в хранилище после его создания? - person Shane van Wyk   schedule 08.03.2016Store
иProduct
— это 2 совокупных корня, потому что они могут существовать сами по себе. Но не уверен, что совокупный корень может взаимодействовать с другим без промежуточного класса/объекта/службы. В идеале я хотел бы получить ответ с примером хорошего подхода для этого. - person Shane van Wyk   schedule 08.03.2016StoreProductService.CarryProductInStore(myProduct, myStore)
. Это использует язык домена и позволяет настраивать продукты до того, как они будут назначены какому-либо магазину. - person Adrian Thompson Phillips   schedule 08.03.2016Product
иStore
двумя поддоменами, то есть большими функциональными областями, которые могут развиваться отдельно, каждая со своими бизнес-командами и, возможно, командами разработчиков, или двумя агрегатами< /i> внутри одного поддомена. - person guillaume31   schedule 09.03.2016