Гибридный NHibernate DAL / BLL - PullRequest
       11

Гибридный NHibernate DAL / BLL

1 голос
/ 08 января 2009

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

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

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

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 08 января 2009

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

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

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

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

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

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

1 голос
/ 28 января 2009

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

2) Как лучше всего настроить NHibernate в приложении веб-форм?

Я могу ответить на второй вопрос, который заключается в использовании 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()
        {

        }
    }
...