Откуда логика внешнего устройства в дизайне, управляемом доменом?

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

Мой домен требует взаимодействия с внешними устройствами, и поэтому мне нужно определить интерфейсы для обнаружения устройств, создания моделей и в некоторой степени связи.

Принадлежат ли вещи, подобные вышеперечисленному, в основном домене, или с точки зрения доменных имен такие вещи (которые помогают моему домену, но не являются моим доменом сами по себе) полностью находятся вне домена и используют поведение, определенное в домене, для работы?

Чтобы добавить немного больше информации, в настоящее время у меня есть архитектура, смоделированная следующим образом:

* Domain (references nothing)
  + IDiscoverDevices (device discovery interface)
    - BeginDiscovery: void
    - EndDiscovery: void
  + IDeviceProvider (factory for device creation)
    - Make: IDevice
  + IDevice

* Framework (references Domain)
  + DiscoverDevices
  + DeviceProvider

* Client (references Domain and Framework)
  + SomeView (takes IDiscoverDevices, IDeviceProvider via ctor)

2 ответа

Используя принцип инверсии зависимостей, ваши интерфейсы будут определены в домене, но они будут реализованы на уровне инфраструктуры.

Если это помогает вашему домену, но не является частью вашего домена как такового, то это не часть основного домена, а часть вспомогательного субдомена. Различные субдомены обычно должны моделироваться в отдельных ограниченных контекстах. Таким образом, у вас должно быть как минимум две модели: одна для вашего основного домена и одна для вспомогательного поддоменов (логика внешнего устройства).

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

Это, конечно, не общее решение, но предполагается, что доменно-управляемый дизайн действительно применим для вашей проблемы, т.е. ваш основной домен сложен с большим количеством бизнес-правил, которые обеспечивают конкурентное преимущество для вашего бизнеса. Если это не так, вы не должны использовать DDD, а использовать что-то более простое, например, используя принцип инверсии зависимости, такой как plalx, ​​предложенный в его ответе.

Другие вопросы по тегам