責任者は誰か
MVC アーキテクチャで作業単位を開始および終了する責任は誰にありますか?
これは管理者の責任ではなく、 SRPに違反しています。コントローラは、UoW についてもまったく認識してはなりません。Web では、通常、サーバーへの要求ごとに 1 つの UoW が使用されます。この場合、UoW は要求の最後に破棄し、要求の開始後のどこかで開始する必要があります (理想的には、UoW の開始は遅延する必要があります)。これを行うのに最適な場所は、Application_EndRequest および Application_BeginRequest ハンドラーを使用する Global.asax (または HttpApplication クラス) です。
これは、IOC フレームワーク (私のお気に入りは Windsor です) で簡単に実現できます。実装の詳細については、この質問を参照してください。
コントローラー。これによりコンテキストが取得されるため、作業単位を開始および終了できます。たとえば、リクエストごとの nHibernate セッションでは、リクエストがいつ開始され、いつ終了したかを知る必要があるため、リクエストを提供するにはコンテキストが必要です。
私は疎結合アーキテクチャの信奉者です。私のコントローラーは、リポジトリ、コンテキスト、または作業単位について何も知りません。コントローラーが呼び出すサービスレイヤーを作成しました(正しい用語かどうかはわかりません)。次に、このサービスはリポジトリ (dll) と連携して、すべてのデータを永続化します。
zihotki が言ったように、この責任をコントローラーに任せると、SRP に違反することになります。これはデータ操作指向のパターンであり、コントローラーにとっては問題になるべきではありません...これは 2 つの違反になります。
誰が責任を負うかについては、それはアーキテクチャによって定義されるものです。StartRequest/EndRequest の提案は十分に堅実なようです。