Гибрид NHibernate DAL/BLL

У меня есть существующий проект веб-форм asp.net, который использует Microsoft Enterprise DAAB для DAL, мне нужно реализовать некоторые расширенные функции, и я хотел бы использовать NHibernate, чтобы упростить задачу.

Существуют ли какие-либо шаблоны/архитектуры проектирования, позволяющие использовать гибридный DAAB/NHibernate DAL? Это хорошая идея ?

Я думаю так: если бы у меня был гибридный DAL, я все равно мог бы передавать запросы с высоким трафиком/нединамические запросы через сторону DAAB и экономить накладные расходы на создание динамического sql. Но все же есть nhibernate для более сложных запросов.

Кроме того, как лучше всего настроить NHibernate DAL/BLL для приложения веб-форм asp.net? Я прочитал учебник на сайте NHibernate и несколько других, похоже, нет единого мнения о начале/завершении сеанса nhib. Я просто ищу пример передовой практики.

Спасибо


person Element    schedule 08.01.2009    source источник


Ответы (2)


Один из подходов, о котором я слышал, заключается в использовании nHibernate, когда вы взаимодействуете с моделью предметной области. Имейте в виду, что nHibernate может вызывать хранимые процедуры, поэтому, если вы хотите избежать генерации SQL, вы можете, но я бы не советовал.

Если у вас есть запросы на создание отчетов или отображение данных, из которых вы не хотите создавать настраиваемые объекты, вы можете использовать DAAB, хотя я бы не рекомендовал делать это, если вы собираетесь создавать свои объекты.

Что касается передовой практики, я обнаружил, что при создании сеанса, когда он вам нужен, а затем сохранении его в httpContext, вы будете закрывать сеанс при каждом запросе.

Единственная другая вещь - это специально создать и завершить транзакцию, которую я бы сделал на вашем уровне службы или уровне приложения, если ваша логика будет охватывать несколько служб (я определяю службу не как веб-службу, а как фрагмент кода высокого уровня, который защищает ваше приложение из вашего уровня домена).

Хорошей отправной точкой является статья Билли Маккаферти здесь: http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx

В его коде есть ошибка/ограничение, ознакомьтесь с моим сообщением в блоге, если вы используете его метод: http://jberke.blogspot.com/2008/10/nhibernate-transaction-session-mgmt.html

person JoshBerke    schedule 08.01.2009

У вас есть два вопроса — вы или модератор должны разделить их на два: 1) Как лучше всего использовать DAAB и NHibernate вместе?

2) Как лучше всего настроить NHibernate в приложении Web Forms?

Я могу ответить на второй, который заключается в использовании HttpModule в ASP.NET для настройки контекста для каждого запроса. Пример модуля можно найти здесь: http://tinyurl.com/b5am9b

public class NHibernateSessionModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.EndRequest += new System.EventHandler(context_EndRequest);
        }

        void context_EndRequest(object sender, System.EventArgs e)
        {
            HybridSessionBuilder builder = new HybridSessionBuilder();
            ISession session = builder.GetExistingWebSession();
            if (session != null)
            {
                                Log.Debug(this, "Disposing of ISession " + session.GetHashCode());
                session.Dispose();
            }
        }

        public void Dispose()
        {

        }
    }
person ssmith    schedule 28.01.2009