Хобрук: Ваш путь к мастерству в программировании

Куда я должен поместить конкретную вещь приложения при моделировании с использованием дизайна, ориентированного на предметную область?

Мы разрабатываем систему управления больницей, используя дизайн, управляемый доменом. У нас есть ограниченный контекст, такой как AccessManagementContext, RadiologyInformativeContext и т. д. Но где я должен разместить таблицу приложений, такую ​​​​как ведение журнала, меню, например, вещи?


Ответы:


1

Ведение журнала и «Меню» (я предполагаю, что вы имеете в виду элемент управления веб-меню/Windows) являются проблемами инфраструктуры и реализации. Они, безусловно, не являются частью вашего домена.

Чтобы дать вам представление о том, как вы можете реализовать принципы DDD в решении VS, вот базовый макет, основанный на использовании Луковая архитектура:

Луковая архитектура

Хотя DDD не занимается "организацией решения", я подозреваю, что это может быть то, о чем вы спрашиваете.

Ваши ограниченные контексты (и весь другой код, связанный с доменом) будут существовать в слоях Domain. Ведение журнала будет реализовано на уровне Infrastructure (если только ведение журнала не является частью вашего вездесущего языка, как указал SephVelut). Меню и тому подобное будут находиться в папке Client (скажем, в проекте веб-приложения).

Что касается ведения журнала, вы можете рассмотреть возможность просмотра События домена, если вы хотите собирать журналы в коде вашего домена.

05.05.2015

2

Domain Driven Design не пытается рассказать вам, как упорядочить вашу архитектуру. Однако он определяет, что должно и не должно входить в ваш домен. Ведение журнала и меню звучат так, как будто их НЕ следует разрешать в ваших AccessManagementContext и RadiologyInformativeContext.

Причины, по которым язык. Кто-то обязательно упомянет слой infrastructure. Но это архитектурная проблема, а не проблема дизайна, основанная на предметной области. Вполне возможно, что вы могли бы разработать ограниченный контекст под названием HospitalRecordsSystem, вездесущий язык которого охватывает проблемы ведения журналов. Так что это возможно, но вы должны спросить: «Разговаривают ли вездесущие языки в этом ограниченном контексте?».

Наконец, что касается архитектуры. В традиционной многоуровневой архитектуре вы должны поместить проблемы инфраструктуры (ввод-вывод, постоянство, проверка, наполнение и т. д.) на уровне, отделенном от вашего домена (в другом пространстве имен/каталоге), и предотвратить прямую зависимость домена от вещей из этого уровня. Вместо этого вы должны использовать интерфейсы вместе с инверсией зависимостей, чтобы соединить их.

05.05.2015
  • Вы абсолютно правы. В своем ответе я уделил некоторое внимание структуре и организации проекта. Хотя это не касается DDD, я подозреваю, что это беспокоит OP. Иногда новичкам полезно заняться DDD посредством реализации, а не философского подхода, который отстаивают многие эксперты. Через практику приходит понимание. 06.05.2015
  • Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..