2012-03-09 5 views
0

Мне нужен совет: Я бы хотел отключить зависимости nHibernate в слоях Presentation и Business Logic, чтобы иметь только уровень логики доступа к данным, ссылающийся на DLL nHibernate.C# nhibernate mulitier architecture

Я вижу только решения, использующие объекты SessionHelper/SessionManager и все созданные на верхнем уровне. Я считаю, что лучшее решение должно существовать.

Какую модель дизайна следует придерживаться? Могу ли я wncapsulate сеанс (менеджер, помощник и т. Д.) В шаблоне репозитория и легко изменить ORM, не форсируя изменения на уровне бизнес-логики?

Образец кода будет оценен. Заранее спасибо.

+1

«легко изменить ORM?» вы можете использовать только наименьший общий знаменатель между всеми ORMS, которые вы, возможно, захотите использовать. Вы будете страдать от проблем с производительностью, потому что вы не можете использовать множество функций, чтобы улучшить это, и у вас будет непротекающая абстракция. – Firo

+1

Этот вопрос возникает много, и общий ответ: не делайте этого. Очень мало случаев, когда возможность замены ORM стоит значительных компромиссов. Трудно «скрыть» ОРМ, не полностью стерилизовать его. –

+0

Привет @MichaelMaddox: Теоретически я не хочу переключать ORM, так как Клиент не платит такого рода инвестиции. Моя цель - реализовать базовые/общие классы (применять во всех моих проектах), и это позволяет мне скрывать то, что я не хочу видеть (т. Е. Зависимости от ORM). Я хотел бы инкапсулировать сеанс nhibernate, EF objectcontext и т. Д. Как бы вы реализовали такой класс? – Joao

ответ

0

Here is a nice presentation about nHibernate Worst Practices

Что вы спрашиваете, является первым Худшие практика, так что не забудьте проверить его

You should check out the presenters nice blog which reviews these types of "architectures"

«Какой шаблон дизайна я должен следовать» Обязательно всегда используйте шаблон здравого смысла и YAGNI :)