Я разрабатываю приложение ASP.NET MVC с помощью Theion Architecture, описанной Джеффри Палермо.
Это проект ASP.NET MVC 2.0, где я требую, чтобы все представления были строго типизированы с использованием выделенных моделей просмотра. Мы не будем передавать модели домена в наши представления. Мы используем AutoMapper для перевода - AutoMapper изолирован в инфраструктуре, Web не знает и не заботится о том, что AutoMapper используется.
В настоящее время я определяю интерфейсы IViewModelMapping в веб-проекте - просто потому, что эта служба будет использоваться контроллерами, и у нее есть прямой доступ к собственным моделям просмотра. Таким образом, интерфейс может иметь доступ как к моделям доменов (в ядре), так и к модели просмотра (в Интернете).
Чтобы обеспечить фактическую реализацию интерфейсов IViewModelMapping, я создал пространство имен ObjectMapping в проекте Infrastructure, которое будет изолировать фактическую реализацию сопоставления с инфраструктурой лука. При этом для этого потребуется, чтобы инфраструктура зависела от BOTH Core и Web.
Мой вопрос: поскольку оба этих проекта технически находятся на окраине лука (в том же слое) - один проект разрешил иметь зависимость от другого проекта в этом слое? Кто-нибудь замечает какие-либо потенциальные проблемы с этим дизайном?
Альтернативный дизайн будет перемещать интерфейсы IViewMapper в Core, но это было бы невозможно, потому что Core не имеет доступа к классам ViewModel. Я мог бы также переместить модели представления в Core, но я чувствую, что они не будут там принадлежать, поскольку они специфичны для слоя пользовательского интерфейса.
Предлагаемая архитектура выглядит следующим образом: обратите внимание, что инфраструктура имеет зависимость от Core AND Web. Веб остается изолированным и имеет доступ только к основной бизнес-логике.