У меня есть решение Visual Studio с 3 проектами:
- Мой веб-сайт (А)
- Бизнес-модель (Б)
- Стойкость (С)
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, если эта информация имеет значение.
РЕДАКТИРОВАТЬ: я нашел этот ответ SO на связанный с этим вопрос, который объясняет, что эти ссылки нужны только в том случае, если классы проекта C
появляются из проекта B
. Я был очень полон решимости не допускать утечек между слоями, и я знаю, что классы Hibernate
используются только в C
, поэтому, возможно, я просто неправильно понимаю...