Я работаю над внедрением базового приложения CQRS + ES. Я видел много примеров, но я не понимаю маршрутизацию между обработчиком команд и агрегатом.Должна ли командная информация передаваться в агрегат с использованием параметров метода или по ссылке?
В некоторых примерах, работа сделал таким образом:
XCommandHandler:
void Handle(XCommand command) {
var aggregate = this.repository.Find<Aggregate>(command.aggId);
aggregate.InvokeSomeBusinessLogic(command.property1, command.property2);
this.repository.Save(aggregate);
}
Но другие делают по-другому:
XCommandHandler:
void Handle(XCommand command) {
var aggregate = this.repository.Find<Aggregate>(command.aggId);
aggregate.InvokeSomeBusinessLogic(command);
this.repository.Save(aggregate);
}
Что это лучший подход, особенно когда у вас много свойств (15 или более) в запятой й?
Благодарим вас, но если пользовательский интерфейс связан с информацией об агрегировании обновлений?, Пользовательский интерфейс фиксирует общую информацию об агенте и помещает в Bus (или Channel, как ваш пример CQRS), поэтому у меня есть команда с этими 15 свойства, связанные с одной и той же задачей, обновляют совокупность. Я должен разделить эту логику на более мелкие команды? или имеет ли команда обновления все данные внутри нее? –
Обновление информации об агрегировании не * на основе задач *; это CRUD. Возможно, эти две статьи из Udi Dahan будут полезны. http://www.udidahan.com/2007/03/31/tasks-messages-transactions-%E2%80%93-the-holy-trinity http://www.udidahan.com/2013/04/28/ запросы-шаблоны-и-поиск-еда-для-мысли –
Perfect. Я понял! Я моделирую модель домена неправильно, я буду делать по-новому. –