Мы разрабатываем систему управления больницей, используя дизайн, управляемый доменом. У нас есть ограниченный контекст, такой как AccessManagementContext
, RadiologyInformativeContext
и т. д. Но где я должен разместить таблицу приложений, такую как ведение журнала, меню, например, вещи?
Куда я должен поместить конкретную вещь приложения при моделировании с использованием дизайна, ориентированного на предметную область?
Ответы:
Ведение журнала и «Меню» (я предполагаю, что вы имеете в виду элемент управления веб-меню/Windows) являются проблемами инфраструктуры и реализации. Они, безусловно, не являются частью вашего домена.
Чтобы дать вам представление о том, как вы можете реализовать принципы DDD в решении VS, вот базовый макет, основанный на использовании Луковая архитектура:
Хотя DDD не занимается "организацией решения", я подозреваю, что это может быть то, о чем вы спрашиваете.
Ваши ограниченные контексты (и весь другой код, связанный с доменом) будут существовать в слоях Domain. Ведение журнала будет реализовано на уровне Infrastructure (если только ведение журнала не является частью вашего вездесущего языка, как указал SephVelut). Меню и тому подобное будут находиться в папке Client (скажем, в проекте веб-приложения).
Что касается ведения журнала, вы можете рассмотреть возможность просмотра События домена, если вы хотите собирать журналы в коде вашего домена.
Domain Driven Design не пытается рассказать вам, как упорядочить вашу архитектуру. Однако он определяет, что должно и не должно входить в ваш домен. Ведение журнала и меню звучат так, как будто их НЕ следует разрешать в ваших AccessManagementContext
и RadiologyInformativeContext
.
Причины, по которым язык. Кто-то обязательно упомянет слой infrastructure
. Но это архитектурная проблема, а не проблема дизайна, основанная на предметной области. Вполне возможно, что вы могли бы разработать ограниченный контекст под названием HospitalRecordsSystem
, вездесущий язык которого охватывает проблемы ведения журналов. Так что это возможно, но вы должны спросить: «Разговаривают ли вездесущие языки в этом ограниченном контексте?».
Наконец, что касается архитектуры. В традиционной многоуровневой архитектуре вы должны поместить проблемы инфраструктуры (ввод-вывод, постоянство, проверка, наполнение и т. д.) на уровне, отделенном от вашего домена (в другом пространстве имен/каталоге), и предотвратить прямую зависимость домена от вещей из этого уровня. Вместо этого вы должны использовать интерфейсы вместе с инверсией зависимостей, чтобы соединить их.