0

MVC3で作業単位パターンを実装しようとしています。

私は持っています:

MVCサービスレイヤー(BLL)

リポジトリレイヤー

複数の種類のデータベース

サービスレイヤーがIOCコンテナによってIUnitOfWorkを渡されるようにしたい。(これは簡単で、この質問の一部ではありません)。

したがって、私のサービスレイヤーはこれを行います:(注:これは擬似コードです)

(using unitOfWork)
{
   ProductSqlRepository.Update();
   PersonOracleRepository.Update();
   IUnitOfWork.Commit();
}

私が見つけることができるすべてのサンプルはEFを使用しています。私のリポジトリの1つはEFを使用しているかもしれませんが、他のリポジトリは使用していないかもしれません。

私の質問は、異なるタイプのデータベース(つまり、EF、Oracle、その他)の上にある可能性のある複数のリポジトリ間で作業単位パターンを使用できるかどうかです。

したがって、SQLデータベースとOracleデータベースへの更新を1つの作業単位の呼び出しでラップしたい場合は、それを行う方法が作業単位です。

私が述べたように、私が見つけることができるすべての例は100%EFソリューションのためのものであり、私は混ぜ合わせて一致させる必要があります。

ありがとうRuSs

4

1 に答える 1

1

すべてのロジックはアクション内で実行されるため、UnitOfWorkスコープは基本的にMVCですでに定義されています。私が見た一般的なパターン(およびアプリで行ったこと)は、アプリにグローバルに登録する属性を介して作業単位を処理し、必要な作業単位ロジック(トランザクションなど)の設定を処理することです。その属性のOnActionExecutingと。OnActionExecutedアクションが子アクションではないことを確認したり、ModelStateエラーをチェックしたりするなど、いくつかの注意点がありますが、この例はオンラインにあります。また、ビューでビューモデルを排他的に使用しない場合、作業単位のスコープが閉じた後、特定のフレームワークでビューにデータを遅延ロードする際に問題が発生する可能性があることにも注意してください。

私のプロジェクトではnHibernateを使用し、これら2つの投稿を実装のインスピレーションとして使用しました。うまくいけば、彼らはあなたにもいくつかのアイデアを与えるでしょう。

http://ayende.com/blog/4809/refactoring-toward-frictionless-odorless-code-what-about-transactions

http://slynetblog.blogspot.ca/2011/04/lightweight-nhibernate-and-aspnet-mvc.html

于 2013-02-05T16:00:52.667 に答える