Совокупные корни для контроля изменений состояния - то, что разрешено в настоящее время, а что нет. Если переход состояния разрешен, продолжайте. Если нет, вы делаете исключение, объясняющее причину, по которой это было запрещено.Агрегат-корень: состояние Изменение или сбой при исключении или ...?
Но что если state- изменение не бывает, потому что это уже в запрашиваемом государстве?
Например, если у вас есть метод Approve
для вашего заполнителя, и к тому моменту, когда он называется, состояние уже одобрено?
- Должен ли исключение бросить а-ля "XYZ уже утвержден"?
- Или это должно быть молча игнорируется?
- Или следует изменить состояние «» с сообщением «0» (event-sourcing, next paragraph)?
В моем случае я использую event sourcing, поэтому происходит событие, если произошло изменение состояния. Наличие событий в моем потоке событий без реального изменения состояния не кажется мне «чистым», потому что я хотел бы быть уверенным, что события действительно были созданы из-за изменений, изменяющих состояние.
Есть эмпирическое правило?
EDIT:
В описанном случае утверждения утвержденную элемент не будет действительно больно. Так что, как правило, так (спасибо @Eben Roux, @ guillaume31).
Но давайте добавим немного больше специи к нему (фактический вопрос за вопросом):
Предположим:
- сообщение шины
- асинхронной команда/обработка событий
- технолог
Что делать, если диспетчер процессов (aka saga) выдает команду (асинхронный) и хочет знать, была ли выполнена эта команда? Я думаю, что уменьшит умственную нагрузку/источники ошибок, если менеджер процессов будет не должен заботиться об этом подробности реализации.
Я вижу 3 способа обработки, что:
- имеет «Command с идентификатором ABC удалось/не удалось» сообщение отправляется на автобус
процесса-менеджер ожидает для этого сообщений вместо этого события - сделать команду выполнения синхронизации
, если процесс-менеджер не встречает каких-либо исключений, все в порядке, переходите - ввести новое событие
ApprovalDeclined { WasAlreadyApproved = true }
дополнительно процесс-менеджер ожидает для этого события - склонение является частью совокупной истории, может быть преимуществом, может быть, никогда не нужно ...
Я знаю: " это зависит от «
Но можете ли вы придумать какое-либо другое (более элегантное/легкое/другое) решение? Какой ваш любимый «совместимый с процессом-менеджер» способ решения этой проблемы?
Да, +1 для 'зависит от вашего домена (или, альтернативно, здравого смысла). –