Spring MVCのは、HibernateのSession
とSessionFactory
を持っていたので、それは途方も働いていました登録し、トランザクションの作成とコミットを処理します。.NETでも同様に行うことができますが、自分で行う必要があります。 Spring MVCのようなツールはJavaに提供します。通常、手動で作成するのではなく、DataContext
インスタンスをサービスレイヤに挿入する必要があります。
サービスレイヤーとは何ですか?私の場合、サービス層はモデルです。そのような場合は、ほとんどがASP.NET MVCの外にあります。ASP.NET MVC(custom filters)でコントローラのアクションの属性を作成する方法がありますが、これはサービスレイヤではありません。サービス層のカスタムトランザクション属性が必要な場合は、主にAspect oriented programming(AOP)を意味します。
あなたの選択は何ですか? Windsor Castle、Spring.NET、Unity 2.0などのAOPをサポートする優れたIoCコンテナを選択するか、AOP用にPostSharpを使用します。トランザクションAOP属性を作成する簡単な方法は、注釈付きメソッドが実行される前にTransactionScope
を作成し、注釈付きメソッドが実行された後にComplete
スコープを作成するだけです。しかし、あなたがまだDataContext
インスタンスを作成してSubmitChanges
を呼び出さなければならないので、それはあなたが望むものではありません。 DataContext
インスタンスをどこかに格納し、注釈付きメソッドを実行するAOP属性が必要です。このメソッドは、ストアド・コンテキスト・インスタンスをロードして使用できます。メソッドが終了すると、AOP属性はSubmitChanges
を呼び出します。唯一の問題は、コンテキストインスタンスを格納する場所とそれを取得する方法です。Spring MVCはSpringを内部的に使用し、インフラストラクチャ全体を提供すると考えていますが、.NETではWebアプリケーションの場合は記述する必要があります。コンテキストをHttpContext.Items
に格納する必要があります。
私の文脈では、service-layerは、DAOの削除、削除結合などで一連のメソッドをトリガーしなければならないメソッドAPIを提供します。 JavaでのPOJO)。サービス層は私の文脈でコントローラのセットではなく、むしろコントローラによって使用されるビジネスロジックの抽象である。サービスは、特定のDAO応答をキャッシュし、繰り返しのデータクエリなどの最適化を提供することを選択することがあります。IoCのためにStructureMapを使用します。 – alexm
同じ答えが有効です。あなたは属性/注釈を持ちますか?次に、StructureMapがinterception/AOPを介してこれをサポートしているかどうかを確認します。属性なしで暮らすことができる場合は、サービスレイヤ操作でコンテキストを作成し、それをDAOに渡します。すべてのDAOが作業を完了すると、サービス操作の変更が送信されます。 –
ありがとうございます。 – alexm