Является ли реализация репозитория частью инфраструктуры?

В проекте DDD у меня есть такая структура:

Инфраструктура

  • MyProj.Library (содержит вспомогательные методы)
  • MyProj.Factory (содержит методы для IoC и DI)
  • MyProj.Data (содержит реализацию IUserRepository)

Домен

  • MyProj.Domain (содержит агрегаты домена и интерфейсы репозитория, то есть IUserRepository)

Приложение

  • MyProj.WebAPI

Мне нужно знать, принадлежит ли MyProj.Data уровню инфраструктуры или уровню домена. Я действительно не понимаю, куда относятся реализованные репозитории.


person Gustavo Gondim    schedule 20.02.2013    source источник


Ответы (1)


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

В качестве примера взгляните на Onion Architecture, в которой говорится

Внутренние слои определяют интерфейсы. Внешние слои реализуют интерфейсы

Луковая архитектура

В этой простой реализации луковой архитектуры VisitorRepository находится на уровне инфраструктуры и реализует IVisitorRepository, находящийся на уровне ядра (домена).

person Martin4ndersen    schedule 20.02.2013
comment
Возможно, вы имели в виду: шестиугольная архитектура - person Filip Zawada; 21.02.2013
comment
На самом деле нет, но архитектура Лука похожа на архитектуру Гексагональной. Хотя я считаю, что луковая архитектура более конкретна. - person Martin4ndersen; 21.02.2013
comment
Что ж, похоже, вы предлагаете, чтобы уровень инфраструктуры располагался ниже модели предметной области, бок о бок со слоем пользовательского интерфейса. Что я узнал из DDD, так это то, что инфраструктура является общей для всех других уровней и находится наверху уровней проекта. Итак, в этой архитектуре ядро ​​домена не может зависеть от инфраструктуры, а в DDD - может. - person Gustavo Gondim; 22.02.2013
comment
В многоуровневой архитектуре, описанной в документе «Проектирование на основе предметной области: решение проблемы сложности в основе программного обеспечения», уровень инфраструктуры находится внизу. Кроме того, уровень домена должен быть изолирован от других слоев, например UI, приложение, инфраструктура. - person Martin4ndersen; 22.02.2013
comment
При применении DDD в многоуровневой архитектуре реализации репозитория переходят на уровень домена, не на уровень инфраструктуры. Причина должна быть очевидна, если вы заметите, что нижний уровень не может (по определению) зависеть от более высокого уровня. То есть инфраструктура не должна зависеть от домена. Здесь также важно понимать, что не зависит от означает, что изменение, сделанное на более высоком уровне (скажем, мы добавляем / удаляем / изменяем объект), не должно требовать изменений на нижнем уровне (я говорю это, чтобы избежать путаницы с вызовы методов или типы, на которые ссылаются между уровнями). - person Rogério; 09.04.2015