2011-12-15 5 views
0

私はC#.NETでデスクトッププロジェクトを構築しています:GUI、ビジネスおよびデータアクセスレイヤー。各ビジネス層クラスは、データベースのエンティティを表します。私はlinqを使用してデータベースにアクセスしています。しかし、今日のプロジェクトの実装方法では、多くの操作をアトミックにすることはできません。ビジネスレイヤで行う必要があります。"unitOfWork"をビジネスレイヤーに持つベストプロジェクトパターン

いくつかのデザインパターンを検索し、同じコンテキストでデータレイヤー内のすべての操作を行い、すべての変更がサブミットされた後にunitOfWorkが見つかりました。これは、操作をアトミックにするために機能します。しかし、問題は、私がやりたい操作は、前に検証する必要があるということです。つまり、データレイヤからメソッドを呼び出す代わりに、以前に検証されるビジネスレイヤからメソッドを呼び出す必要があります。このビジネス・レイヤーの呼び出しは、別のunitOfWorkを作成し、結果として、私がしようとしているより大きな操作のアトミック性を破る別のコンテキストを作成します。

質問:同じlinqコンテキスト内のビジネスレイヤからビジネスレイヤの1つ以上のメソッドを呼び出すにはどのようなプロジェクトパターンが最適でしょうか?それをやっての

答えて

1

一つの方法は、次のようになります。

  • は、あなたのビジネス層の上にサービス層を作成します。
  • このサービスレイヤーは、2つのサービス(実際のWCFサービスまたは通常のC#クラス)で構成されています.1つは読み取り用、もう1つは書き込み用です。
  • 読み取りサービスはトランザクションではなく、クエリを実行するメソッド(つまりデータを読み取るメソッド)のみを含んでいます。
  • 書き込みサービスはトランザクション処理です。すべてのメソッドはトランザクションコンテキストを作成するか、作業パターンの単位に従います。
  • 書込みサービスは、ビジネスレイヤーでC/U/D操作を実行する前に、読み取りサービスにアクセスして検証を行います。
+0

良いと思われます。このプロジェクトパターンには名前がありますか?これについてもっと検索したいですか?ありがとう! – joaocarlospf

+0

これは、CQRS:コマンド/クエリの責任分担に基づいています。 –