1

Microsoft の Enterprise DAAB を DAL に使用する既存の asp.net Webforms プロジェクトがあり、いくつかの拡張機能を実装する必要があり、NHibernate を使用して作業を簡単にしたいと考えています。

ハイブリッド DAAB/NHibernate DAL を可能にする設計パターン/アーキテクチャはありますか? それは良い考えですか?

私の考えでは、ハイブリッド DAL があれば、高トラフィック/非動的クエリを DAAB 側に渡し、動的 ​​SQL 生成のオーバーヘッドを節約できます。ただし、より複雑なクエリにはまだ休止状態があります。

さらに、asp.net webforms アプリケーション用に NHibernate DAL/BLL をセットアップする最良の方法は何ですか? NHibernate サイトのチュートリアルを読みましたが、nhib セッションの開始/終了に関するコンセンサスが得られていないようです。私はベストプラクティスの例を探しています。

ありがとう

4

2 に答える 2

2

私が聞いたアプローチの 1 つは、ドメイン モデルとやり取りするときに nHibernate を使用することです。nHibernate はストアド プロシージャを呼び出すことができるので、SQL 生成を回避したい場合はできることを覚えておいてください。

カスタム エンティティを作成したくないデータをレポートまたは表示するためのクエリがある場合は、DAAB を使用できますが、エンティティを作成する場合はこれを行うことはお勧めしません。

ベスト プラクティスとしては、必要なときにセッションを作成し、それを httpContext に保存すると、要求が発生するたびにセッションが閉じられることがわかりました。

他の唯一のことは、ロジックが複数のサービスにまたがる場合にサービス層またはアプリケーション層で行うトランザクションを具体的に作成して終了することです (サービスを Web サービスとしてではなく、シールドする高レベルのコードとして定義します)。ドメイン層からのアプリケーション)。

良い出発点は、Billy McCafferty の記事 ( http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx ) です。

彼のコードにはバグ/制限があります。彼の方法を使用する場合は、私のブログ投稿をチェックしてください

于 2009-01-08T17:29:09.433 に答える
1

質問が 2 つあります。あなたまたはモデレーターは、これを 2 つに分けてください: 1) DAAB と NHibernate を一緒に使用する最良の方法は何ですか?

2) Web フォーム アプリケーションで NHibernate をセットアップする最良の方法は何ですか?

ASP.NET で HttpModule を使用して、各要求のコンテキストを構成するという 2 番目の質問に答えることができます。モジュールの例はここにあります: 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()
        {

        }
    }
于 2009-01-28T04:17:23.347 に答える