Мысли об API CustomerService
Есть ли какие-либо конкретные причины, по которым вы решили инкапсулировать эту операцию в CustomerService? Это выглядит немного Анемия для меня. Может быть, вместо этого он может быть инкапсулирован непосредственно на Клиента?
Возможно, вы упустили что-то из примера кода CustomerService для упрощения ...
Однако, если необходимо, изменение подписи для экземпляра Customer решает проблему:
public void AddEventReminder(Customer customer, int eventId)
но опять же, Int32 вряд ли можно квалифицировать как Domain Object, поэтому подпись должна действительно быть
public void AddEventReminder(Customer customer, Event event)
Вопрос теперь в том, добавляет ли этот метод какое-либо значение вообще?
Что такое совокупный корень?
Ни один из них, я бы подумал. Совокупный корень означает, что вы управляете потомками только через корень, и в этом случае это не имеет смысла.
Рассмотрим варианты:
Если вы сделаете Event корневым, это будет означать, что у вас не может быть CustomerRepository, и единственный способ получить, отредактировать и сохранить Customer будет через Event. Это звучит очень неправильно для меня.
Если вы сделаете Клиента корнем, у вас может не быть EventRepository, и единственный способ получить, отредактировать и сохранить Событие будет через определенного Клиента. Это звучит так же неправильно для меня.
Единственная оставшаяся возможность - это то, что они являются отдельными корнями. Это также означает, что они слабо связаны друг с другом, и вам понадобится какая-то доменная служба для поиска событий для клиента или клиентов для события.