Я строю трехуровневую архитектуру с уровнем представления (PL), бизнес-логикой (BLL) и уровнем доступа к данным (DAL).
Обычная трехуровневая логика архитектуры утверждает, что BLL должен выступать в качестве посредника между PL и DAL. PL не должен даже знать, что есть база данных, в то время как DAL не должен знать, что есть BLL или PL.
Традиционная архитектура с 3 уровнями и 3 уровня с IOC
Реализация выше создаст следующие зависимости между 3 различных физических проектов следующим образом
- PL Project -> Отнесение BLL DLL
- BLL Project -> Отнесение DAL DLL
- DAL Проект -> No Reference
Однако применение концепции МОК между BLL и DAL путем определения интерфейсов в BLL для ДАЛ для реализации и использования DI с помощью инъекции конструктора изменит зависимость следующим
- PL Project -> Отнесение BLL DLL, ведение DAL DLL (для DI конкретных типов к конструкторам объектов БЛЛ)
- БЛЛА PROJE кт -> Нет Ссылка
- DAL Project -> Отнесение BLL DLL (для реализации BLL интерфейсов)
Так являются МОК и традиционный 3 яруса в конфликте?
В идеале я хочу добиться следующего, сохраняя при этом мой МОК с помощью DI.
- PL Project -> Отнесение BLL DLL
- BLL Project -> Нет Ссылка
- DAL Project -> Отнесение BLL DLL
Как вы это делаете?
Старый вопрос, но я думаю, что этот другой ответ может помочь: http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies- в-начальное приложение. В принципе, вы не хотите, чтобы ваш BLL ссылался на DAL, а скорее вводил его с помощью контейнера IoC. Следовательно, ваш корневой состав (точка входа в приложение, возможно, в проекте PL) будет ссылаться на все ваши DLL, или вы используете позднюю привязку. –