Вопрос

На каком уровне должны располагаться классы репозитория?Домен или Инфраструктура?

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

Решение

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

Вопрос в том - вы собираетесь позволить себе использовать репозитории из внутренней части домена?
Если это так - тогда вы вынуждены вводить их.

Я сам люблю положить их вне домена. Итак - типичный жизненный цикл что-то выглядит так =>

Ui => Контроллер => Получить совокупный корню из Repo => Call Logic через совокупный корню => Если новый совокупный корню создан, добавьте его в REPO.

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


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

Используйте то, что кажется для вас более естественным, и будьте готовы переключать свои пути в любое время.

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

Репозиторий интерфейсы являются частью домена. Настоящий реализация интерфейсов должны быть частью инфраструктуры.

Классы реализации репозитория вместе с отдельными интерфейсами (если они существуют) должны входить в доменный уровень.

Причина кроется в фундаментальном правиле, которому необходимо следовать в многоуровневой архитектуре: более низкий уровень не должен зависеть от более высокого уровня.

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

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

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

Ссылки: Википедия, MSDN

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