Где разместить специфичные для технологии вещи в модели предметной области? - PullRequest
2 голосов
/ 05 января 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 05 января 2010

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

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

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

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

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

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

0 голосов
/ 05 января 2010

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

...