J Oliver CommonDomain: Почему EventStoreRepository.GetById открывает новый поток, когда агрегат не существует? - PullRequest
1 голос
/ 14 сентября 2011

Пожалуйста, объясните причину создания EventStoreRepository.GetById для создания нового потока, когда агрегат не существует.Такое поведение дает GetById двойную ответственность, которая в моем случае может привести к нежелательным результатам.Например, мои агрегаты всегда реализуют фабричный метод для их создания, так что их первое событие приводит к установке идентификатора агрегата.Если команда была обработана до существования агрегата, она может завершиться успешно, даже если для агрегата не установлен ее Id или не инициализировано другое состояние (крах-n-burn с исключением нулевой ссылки также вероятен)

Я бы предпочел, чтобы GetById выдавал исключение, если агрегат не существует для предотвращения преждевременного создания и обработки команд.

Спасибо,

Джо

1 Ответ

2 голосов
/ 19 сентября 2011

Это было глупое дизайнерское решение с моей стороны. Я ходил взад и вперед на этом. Честно говоря, я все еще об этом и вперед.

Проблема в том, что исключения действительно должны использоваться для указания исключительных или неожиданных сценариев. Проблема в том, что не найденный поток может быть обычной операцией и даже ожидаемой операцией в некоторых отношениях. Я возился с идеей создания исключения, возврата нуля или возврата пустого потока.

Чтобы определить, является ли агрегат пустым, нужно проверить свойство Revision, чтобы узнать, равно ли оно нулю.

...