У меня есть решение Visual Studio с 3 проектами:
- MyWebSite (A)
- BusinessModel (B)
- Стойкость (С)
Persistence
, проект C
, зависит от NHibernate
и содержит все интерфейсы репозитория, Hibernate
реализации этих репозиториев и классы, которые отображаются на таблицы БД.
BusinessModel
, проект B
, зависит от C
и содержит все классы обслуживания и классы, представляющие сущности бизнес-домена. Эти службы используют репозитории для извлечения данных, а затем преобразуют эти данные в бизнес-представления поверхности на своих собственных интерфейсах.
MyWebSite
, проект A
, зависит от A
и содержит все классы / файлы MVC. Контроллеры MVC здесь используют класс обслуживания от B
для выполнения любых функций бизнес-логики. На этом уровне не известно, что проект B
использует репозитории проекта C
для выполнения своих операций.
В идеальном мире я бы предположил, что проект A
должен ссылаться на B
, который ссылается на C
, который ссылается на NHibernate
. Это не похоже на правду. Я считаю, что для проекта A
нужна ссылка на B
и C
и NHibernate
! Мне не нравится идея моего веб-приложения, требующего знания моей серверной архитектуры, и я особенно не хочу, чтобы он осознавал тот факт, что я использую NHibernate
в качестве своего ORM.
Есть ли способ заставить эти проекты использовать транзитивные зависимости при разрешении их ссылок?
Мой проект - .NET 4 в Visual Studio 2010, если эта информация имеет какое-либо значение.
EDIT:
Я нашел этот ответ SO на связанный вопрос, который объясняет, что эти ссылки необходимы, только если классы проекта C
обнаружены в проекте B
. Я был полон решимости не иметь утечек между слоями, и я знаю, что Hibernate
классы используются только в C
, так что, возможно, я просто не правильно понимаю ...