Приведу два примера. Опустим некоторые даже важные вещи из DDD сейчас, примеры призваны показать суть вопроса.
Как правильнее сделать с точки зрения DDD?
Есть два корневых агрегата, продавец и объявление. Продавец может редактировать объявление в данных примерах:
1.
Если модели должны отражать реальную бизнес логику. То именно Seller изменяет объявление. Те клиентский слой вызывает методы changeAdvertName() и changeAdvertCost() агрегата Seller. Это дает такое преимущество как скажем, проверка доступа, мы можем видеть что Seller может изменить только свои Adverts. Это первый вариант как можно сделать.
//Client layer call seller.changeAdvertName(name)
//AR Seller
class Seller{
adverts
changeAdvertName(advertId, name){
adverts[advertId].changeName(name)
}
changeAdvertCost(advertId, cost){
adverts[advertId].changeCost(cost)
}
}
//AR Advert
class Advert{
name
cost
changeName(name){
this.name = name
}
changeCost(cost){
this.cost = cost
}
}
2.
Другой вариант, это где клиентский слой будет вызывать changeName и changeCost напрямую у агрегата Advert. Такую реализацию я чаще вижу в разных примерах.
//Client layer call advert.changeName(name)
//AR Advert
class Advert{
name
cost
changeName(name){
this.name = name
}
changeCost(cost){
this.cost = cost
}
}
Оба ли вариант допустимы в DDD? И какой из них более правильный и логичный с точки зрения DDD?