ASP.NET MVP с NHibernate и Spring.NET. Нужен ли OSIV? - PullRequest
1 голос
/ 16 ноября 2011

Я пытаюсь интегрировать NHibernate в существующий проект ASP.NET, который уже использует Spring.NET и шаблон MVP для достижения четкого разделения проблем.Другими словами, ни в одном из моих докладчиков / представлений нет кода доступа к данным или информации о них, и я хотел бы сохранить его таким образом.

Однако пример Spring.Northwind.Web, который поставляетсяВ источнике Spring.NET каждый Web-контроллер (т.е. Presenter) принимает объект NHibernate ISessionFactory в качестве зависимости конструктора.Исходя из моего ограниченного объема чтения, похоже, что эта связь необходима, если кто-то хочет использовать OSIV.Предполагая, что я не хочу OSIV (все еще читая об этом), могу ли я безопасно удалить зависимость ISessionFactory из своего уровня Presentation?Я был бы очень признателен, если бы более опытные участники NHibernater могли заявить о своих плюсах и минусах и о последствиях отказа от использования OSIV или любых других проблем с этим стеком.

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Я думаю, что следующее предположение, которое вы делаете, неверно:

Однако пример Spring.Northwind.Web, который поставляется с В источнике Spring.NET каждый веб-контроллер (т. Е. Ведущий) принимает NHibernate ISessionFactory объект как конструктор зависимости.

В примере проекта есть один «контроллер»: NHibernateCustomerEditController. И это действительно вводится с фабрикой сессий . Однако это не тот контроллер в том смысле, в котором вы его представляете: это служебный класс для управления CurrentCustomer в сеансе пользователя - он демонстрирует использование объектов в области сеанса.

В этом примере не используется шаблон MVP; зависимости от служб и репозиториев (DAO) вводятся непосредственно на страницу.

Open session in view (OSIV) реализован в виде модуля http, и поэтому он не требует, чтобы фабрика сеансов вставлялась на каждую страницу (или для представления страницы, если вы применяете MVP) - «она просто есть в http context ".

В вашей ситуации (я полагаю) услуги вводятся вашему докладчику; эти услуги могут зависеть от DAO, для которых требуется SessionFactory. нет необходимости вводить SessionFactory на каждом докладчике или странице: вы можете продолжить свою "обычную" настройку с применением или без применения OSIV. Ваш уровень представления не должен зависеть от SessionFactory любого вида.

0 голосов
/ 16 ноября 2011

Честно говоря, я бы не стал связывать NHibernate и ASP.NET MVP таким образом, первый - это ORM, а второй - это структура уровня представления, которая не должна быть привязана и зависеть от какой-либо конкретной технологии доступа к данным.

прочитайте мой ответ здесь: MVC3 и Entity Framework это действительно как общее правило для любой технологии пользовательского интерфейса или технологии ORM / DAL, идея состоит в том, чтобы наслоить вещи таким образом, чтобы пользовательский интерфейс (MVP, MVC, WebFormsWPF, Jquery, Windows Forms, SL ...) не зависят и не знают о конкретном доступе к данным и деталях ядра базы данных.

...