Где разместить технологические вещи в модели домена?

StackOverflow https://stackoverflow.com/questions/2004879

Вопрос

У нас есть приложение, которое, наряду со многими вещами, вносит некоторые изменения в Active Directory (добавить/удалить пользователя из группы, изменить значения атрибутов на пользователь и т. Д.).

Сейчас мы находимся в процессе перепроектирования его (от «кода спагетти» в более многослойное решение). Функции управления Active Directory - это то, что мы хотели бы в некоторой степени абстрагировать уровень домена, но в то же время большинство функций очень зависимы от технологий.

Должны ли мы разместить весь код доступа Active Directory на уровне доступа к данным вместе с нашим DB-ACCESS, или можно создать библиотеку функций Active Directory и вызов в этой библиотеке непосредственно из модели домена? Это делает объект домена настойчивым осознанием, и это, вероятно, плохая идея?

Или вместо этого должен быть выполнен все доступ к Active Directory на уровне службы и даже не включать в себя уровень домена?

Это было полезно?

Решение

Доменные модели должны быть Технологические, так что не помещайте свой рекламный код в модель домена.

По сути, вы можете сказать, что AD -код - это просто еще одна форма доступа к данным, поэтому он принадлежит к доступу к данным Слой (Дал). Тем не менее, он не принадлежит вашему модулю базы данных, так как это было бы нарушением Принцип единственной ответственности (SRP - это применимо как к модулям, так и к отдельным типам).

Вместо того, чтобы объединить его вместе с доступом к базе данных, реализуйте его в собственной библиотеке. Концептуально, он принадлежит к одному слою, но он делает разные вещи, поэтому теперь у вас есть две библиотеки в одном слое. Это абсолютно нормально - у вас может быть столько библиотек в каждом уровне, сколько вам нужно.

В модели домена рассматривайте доступ к AD (и доступ к БД) как абстракции. Абстрактный Репозитории подход по умолчанию. Библиотека AD будет содержать реализации репозитория AD, а библиотека DB будет содержать реализации репозиторий DB.

Это хорошо соответствует Доменная дизайн и концепция Антикоррупционный слой.

Вы можете использовать Внедрение зависимости (Di) Чтобы подключить бетонные репозитории вверх с вашей доменной моделью.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top