Архитектура C # NHibernate, трехуровневое приложение - PullRequest
2 голосов
/ 13 декабря 2010

Мне нужен совет, как мы можем отделить зависимости nHibernate на уровне представления. В настоящее время у нас есть трехуровневое приложение winforms C #, состоящее (упрощенное) из следующих слоев:

  • Пользовательский интерфейс (UI)
  • Бизнес-логика (БАЛ)
  • Логика доступа к данным (DAL)

Мы переносим это приложение в ORM (nHibernate) и в идеале хотели бы иметь только DAL, ссылающийся на nHibernate. Мы также хотим использовать функциональность «Единица работы», которая включена в nHibernate, применяя методологию «Сеанс на разговор».

Чтобы добиться этого, нам нужно создать и открыть сеанс в пользовательском интерфейсе, передать сеанс через BAL в DAL, однако мы не сможем этого достичь, не создав зависимости nHibernate как в BAL, так и в DAL.

Любой совет будет оценен. Как мы должны структурировать архитектуру, чтобы избежать любых ссылок на nHibernate в пользовательском интерфейсе и BAL. Есть идеи?

Я также должен добавить, что мы не хотим, чтобы пользовательский интерфейс также имел ссылку на DAL.

UI => BAL => DAL

Ответы [ 4 ]

2 голосов
/ 13 декабря 2010

Невозможно сделать это таким образом, поскольку шаблон UnitOfWork реализуется объектом Session NHibernate.Однако вы хотите ссылаться только на NHibernate из вашего DAL, что совершенно бесполезно, поскольку ваш DAL ничего не знает о контексте приложения, и этот контекст необходим для использования UnitOfWork.

1 голос
/ 13 декабря 2010

Настройте свой контейнер IoC в отдельной библиотеке классов, например, используя шаблон «GuyWire», описанный здесь:

http://nhforge.org/blogs/nhibernate/archive/2009/11/07/nhibernate-and-wpf-the-guywire.aspx

1 голос
/ 13 декабря 2010

Взгляните на Поваренную книгу NHibernate 3.0 Я нашел ее весьма полезной для знакомства с NHibernate.

Вам нужно будет извлечь ваши сущности и создать POCO (Plain Old CLR Objects). Ваш пользовательский интерфейс не потребует никаких знаний о NHibernate. Вы создадите методы на своем уровне данных для управления вашими данными.

0 голосов
/ 13 декабря 2010

Недавно я создал пример развязанной архитектуры с использованием nhibernate в приложении asp.net mvc. Он использует шаблон репозитория и отдельную единицу работы. Большинство из этих концепций следует использовать и в толстом клиенте. Вот поисковая ссылка в моем блоге с сообщениями, которые могут быть интересными.

http://blog.bobcravens.com/?s=Nhibernate

Надеюсь, это поможет вам начать. Дайте мне знать, если у вас есть вопросы.

Bob

...