2

Commit()Asp.Net MVCアプリのUnitOfWorkはどこに呼び出す必要がありますか?それでも、コントローラーユニットをテスト可能にしてください。

HttpModuleを使用しますか?ベースコントローラーを作成して使用しOnActionExecutedますか?またはGlobal.asax Application_EndRequest():?

4

2 に答える 2

4

コントローラは次のようになります。

[HttpPost]
public ActionResult SubmitOrder(Order o)
{
   try
   {
       repository.Add(o);
       unitOfWork.Commit();
   }
   catch (YourCustomExceptionClass exc) 
   {
      ModelState.AddError(exc.ToString());
   }

   return View();
}

unitOfWorkは、コントローラーレベルで次のように宣言する必要があります。

IUnitOfWork unitOfWork;

そして、コントローラーのctorに注入されます-できればHTTPリクエストごとにDIを使用します。

あなたがそれについて考えるとき-ウェブアプリケーションの文脈での作業の単位は通常HTTPリクエストです。

また、HTTPリクエストは、作業を実行するための1つのアクションメソッドのみに送信されます。もちろん、PRGパターンがあります(後でHttpGetアクションにリダイレクトします) 。ただし、 [HttpPost]HTTPリクエストごとに1つのアクション呼び出しのみが必要です。

したがって、アクションメソッドレベルでUoWをコミットすることは理にかなっています。

IUnitOfWorkの2つの実装が必要です。

  • EntityFrameworkUnitOfWorkIUnitOfWork
  • InMemoryUnitOfWorkIUnitOfWork

したがって、単体テストの場合は、InMemoryUnitOfWorkを挿入するだけです(List<T>たとえば、変更を静的にコミットします)

于 2010-12-16T22:35:07.707 に答える
0

UIがcommit呼び出しをドメインコントローラーに送信し、ドメインコントローラーがドメインレイヤーの関係者に呼び出しを渡す必要があるようです。

于 2010-12-16T22:30:57.110 に答える