Я читал о доменно-ориентированном дизайне почти два года и осторожно вводил некоторые концепции в свою повседневную работу или, по крайней мере, планировал, как то, что я регулярно делаю, можно сделать в доменно-управляемом дизайне.
Один из выводов, к которому я начал приходить, особенно в ответ на прочтение более подробной информации об источнике событий и разделении ответственности по запросам команд (CQRS), заключается в том, что, возможно, доменные объекты предназначены для использования только в целях записи. Чтобы быть более ясным, кажется, что то, что люди тонко предлагают в большей части документации, которую я прочитал, что доменные объекты отвечают за выполнение ориентированных на домен операций / вычислений, проверки, а затем существуют в основном, чтобы обеспечить путь к постоянству через инфраструктура, предоставляемая в рамках реализации репозитория. Хотя мне действительно нравится тот факт, что это может значительно упростить модель предметной области, поскольку она снимает с себя ответственность разоблачения состояния.
Если действительно верно, что доменные объекты в основном должны использоваться как объекты только для записи, то это вызывает у меня некоторые вопросы, на которые, я надеюсь, кто-то может ответить.
- Как можно выполнить модульные тесты для объекта, который имеет сеттеры, или методы, которые изменяют состояние объекта, но не предоставляют внешне открытый интерфейс для чтения состояния, например, из методов получения свойств в C #? Можно ли выставлять состояние только для того, чтобы сделать этот объект тестируемым?
- Как показать пользователю результаты вычислений или операций, выполненных в домене, без необходимости их сохранения, а затем извлечь результаты из постоянного хранилища вне контекста домена? Можно ли выставлять состояние исключительно с целью показать результаты?
Является ли эмпирическое правило, что единственными получателями свойств (получателями доступа) должны быть те, которые также доступны для записи в домене? Или, иначе говоря, следует избегать только свойств, доступных только для чтения, поскольку они существуют только для целей чтения и, таким образом, не играют необходимой роли в реальной модели предметной области?
Материалы по теме:
Нет. CQRS может использоваться вместе с DDD.
источник
Модульные тесты вашей доменной модели должны проверять, что для каждой выполняемой команды вызываются правильные доменные события. Ваши доменные команды и захваченные события могут быть опрошены на предмет состояния.
Вы также можете переопределить
ToString()
команды и события своего домена, чтобы обеспечить автоматическую, удобочитаемую отчетность о состоянии.Чтобы ответить на ваш второй вопрос, чтобы отобразить результаты команд, вы должны организовать публикацию событий домена в вашей модели чтения.
источник