Где разместить технологические вещи в модели домена?
-
18-09-2019 - |
Вопрос
У нас есть приложение, которое, наряду со многими вещами, вносит некоторые изменения в Active Directory (добавить/удалить пользователя из группы, изменить значения атрибутов на пользователь и т. Д.).
Сейчас мы находимся в процессе перепроектирования его (от «кода спагетти» в более многослойное решение). Функции управления Active Directory - это то, что мы хотели бы в некоторой степени абстрагировать уровень домена, но в то же время большинство функций очень зависимы от технологий.
Должны ли мы разместить весь код доступа Active Directory на уровне доступа к данным вместе с нашим DB-ACCESS, или можно создать библиотеку функций Active Directory и вызов в этой библиотеке непосредственно из модели домена? Это делает объект домена настойчивым осознанием, и это, вероятно, плохая идея?
Или вместо этого должен быть выполнен все доступ к Active Directory на уровне службы и даже не включать в себя уровень домена?
Решение
Доменные модели должны быть Технологические, так что не помещайте свой рекламный код в модель домена.
По сути, вы можете сказать, что AD -код - это просто еще одна форма доступа к данным, поэтому он принадлежит к доступу к данным Слой (Дал). Тем не менее, он не принадлежит вашему модулю базы данных, так как это было бы нарушением Принцип единственной ответственности (SRP - это применимо как к модулям, так и к отдельным типам).
Вместо того, чтобы объединить его вместе с доступом к базе данных, реализуйте его в собственной библиотеке. Концептуально, он принадлежит к одному слою, но он делает разные вещи, поэтому теперь у вас есть две библиотеки в одном слое. Это абсолютно нормально - у вас может быть столько библиотек в каждом уровне, сколько вам нужно.
В модели домена рассматривайте доступ к AD (и доступ к БД) как абстракции. Абстрактный Репозитории подход по умолчанию. Библиотека AD будет содержать реализации репозитория AD, а библиотека DB будет содержать реализации репозиторий DB.
Это хорошо соответствует Доменная дизайн и концепция Антикоррупционный слой.
Вы можете использовать Внедрение зависимости (Di) Чтобы подключить бетонные репозитории вверх с вашей доменной моделью.
Другие советы
Я думаю, что технология конкретных вещей - это детали реализации, не должны быть помещены в модель домена.