MVCでの作業の単位を実装する方法:責任を
-
19-09-2019 - |
質問
を責任を持って誰が
<時間>誰がMVCアーキテクチャで作業単位を開始し、終了する責任を持つ?
解決
それは SRP に違反し、コントローラの責任ではありません。コントローラは、まったくUOWについて知るべきではありません。ウェブでは、サーバーへのリクエストごとに1つのUOWが通常使用されています。この場合、UOWは、要求の端部に配置され、要求の開始後(理想的に怠惰でなければなりませんUOWの開始)どこかで起動する必要があります。これを行うには最高の場所は、Global.asaxの(またはあなたのHttpApplicationクラス)Application_EndRequestとApplication_BeginRequestハンドラを使用している。
これは、簡単に(私のお気に入りはウィンザーである)、 IOCフレームワークを用いて達成することができます実装の詳細についてます。
他のヒント
コントローラ。これは、コンテキストを取得しますので、あなたは、作業単位を開始し、終了することができます。例えば、要求ごとNHibernateはセッションは、あなたがあなたのリクエストを与えるために、コンテキストを必要とするので、要求が開始され、終了した時を知っているあなたが必要になります。
私は、疎結合アーキテクチャの信者です。私のコントローラは、リポジトリ、コンテキストまたはのUnitOfWorkについて何も知りません。私は、コントローラが呼び出す(わからないことが正しい用語である)サービス層を作成しました。このサービスは、すべてのデータを永続化するために、リポジトリ(DLL)で動作します。
zihotkiあなたはコントローラにこの責任を与える場合は、SRPを違反すると述べたよう。これは、データ操作指向のパターンであり、そのようにコントローラの懸念すべきではない...それはそれ2件の違反になるだろう:SoCの原理のためのSRPとanothrtための1つを
。責任を持っている人については、それはあなたのアーキテクチャによって定義されるべきものです。開始要求/ EndRequestの提案が十分に固体ようです。