Команды поиска событий против событий - PullRequest
13 голосов
/ 13 июля 2011

Я понимаю разницу между командами и событиями, но во многих случаях вы заканчиваете избыточностью и отображением между двумя по существу одинаковыми классами (ThingNameUpdateCommand, ThingNameUpdatedEvent).Для этих простых случаев вы можете / используете ли вы событие также как команду?Люди сериализуют в магазин все команды, а также все события?Мне кажется, это немного излишне.

Ответы [ 2 ]

17 голосов
/ 08 августа 2011

Вся партия этой избыточности по какой-либо причине в общем случае, и вы хотите избежать использования одного и того же сообщения для двух разных целей по ряду причин:

  1. Источник событий должен быть версионирован при изменениитак как они хранятся и повторно используются (десериализуются) при увлажнении совокупного корня.Будет немного неловко, если класс также будет использоваться в качестве сообщения.
  2. Увеличена связь, теперь этот же класс используется обработчиками команд, моделью домена и обработчиками событий.Отстранение команды от события может упростить вам жизнь в будущем.
  3. Наконец, ясность.Команды выдаются на языке, который просит что-то сделать (как правило, обязательно).События являются представлениями о том, что произошло (прошедшее время обычно).Этот язык становится запутанным, если вы используете один и тот же класс для обоих.

В конце концов, это просто классы данных, это не то, что это «жесткий» код.Есть способы фактически избежать некоторых типов для простых сценариев, таких как code-gen.Например, я знаю, что Грег использовал преобразования XML и XSD для создания всех классов, необходимых для данного домена в прошлом.

Я бы сказал, что для многих простых случаев вы можете задать вопрос, если этодействительно домен (то есть моделирование поведения) или просто данные.Если это просто данные, рассмотрите возможность использования здесь поиска событий.Ниже приведена ссылка на доклад Уди Дахана о разрушении модели вашего домена, так что не все из них требуют поиска событий.Я сам как бы согласен с таким образом мышления.

http://skillsmatter.com/podcast/design-architecture/talk-from-udi-dahan

7 голосов
/ 01 декабря 2014

Проработав несколько примеров и особенно презентацию Грега Янга (http://www.youtube.com/watch?v=JHGkaShoyNs)), я пришел к выводу, что команды являются избыточными. Это просто события от вашего пользователя, они нажимали эту кнопку. Вы должны сохранитьони точно так же, как и другие события, потому что это данные, которые вы не знаете, хотите ли вы использовать их в будущем. Ваш пользователь добавил, а затем удалил этот элемент из корзины или, по крайней мере, попытался.может позже захотеть использовать эту информацию, чтобы напомнить пользователю об этом позже.

...