Вся партия этой избыточности по какой-либо причине в общем случае, и вы хотите избежать использования одного и того же сообщения для двух разных целей по ряду причин:
- Источник событий должен быть версионирован при изменениитак как они хранятся и повторно используются (десериализуются) при увлажнении совокупного корня.Будет немного неловко, если класс также будет использоваться в качестве сообщения.
- Увеличена связь, теперь этот же класс используется обработчиками команд, моделью домена и обработчиками событий.Отстранение команды от события может упростить вам жизнь в будущем.
- Наконец, ясность.Команды выдаются на языке, который просит что-то сделать (как правило, обязательно).События являются представлениями о том, что произошло (прошедшее время обычно).Этот язык становится запутанным, если вы используете один и тот же класс для обоих.
В конце концов, это просто классы данных, это не то, что это «жесткий» код.Есть способы фактически избежать некоторых типов для простых сценариев, таких как code-gen.Например, я знаю, что Грег использовал преобразования XML и XSD для создания всех классов, необходимых для данного домена в прошлом.
Я бы сказал, что для многих простых случаев вы можете задать вопрос, если этодействительно домен (то есть моделирование поведения) или просто данные.Если это просто данные, рассмотрите возможность использования здесь поиска событий.Ниже приведена ссылка на доклад Уди Дахана о разрушении модели вашего домена, так что не все из них требуют поиска событий.Я сам как бы согласен с таким образом мышления.
http://skillsmatter.com/podcast/design-architecture/talk-from-udi-dahan