リポジトリとサービスのパターンを使用するアプリケーションでは、サービスレイヤが常に呼び出され、リポジトリは直接呼び出されないことを確認するにはどうすればよいですか?リポジトリ/サービスのパターンとデータの一貫性
例:それはサービスのexistanceを知らないので、プログラマは、時々そのように単純ではありません(直接リポジトリを呼び出すことが
:
class OrderRepository { void CreateOrder(Order o) ... } class OrderService { void CreateOrder(Order o) { //make some business logic tests ... //call repository _orderRepository.CreateOrder(o); } }
私は二つの問題を参照してくださいこの例のように(1つのサービス=同じメソッド名を持つ1つのリポジトリ)、いくつかのアプリケーションの文書化が不十分である、または急いでいる人が、対応するサービスが存在する(間違っている)かどうかを忘れる可能性があります。
全く異なる:長い時間前に、誰かがビューを作成し+注文リポジトリを直接使用するコントローラを作成しました。当時、ビジネスロジックのチェックや追加の操作を行う必要はなく、オーダーリポジトリのみが存在していました(それが必要ないため)。後で注文を作成するときに追加の操作が必要になる場合は、サービスが作成されます。問題は、古いリポジトリの呼び出しを行うすべてのコントローラを変更する必要があることです。レポジトリの原則/アイデア(とレイヤー内のコードの分離)は、部品を互いに独立させるものではないのですか?
"...部品を互いに独立させるはずですか?"これは誤解です。 *責任を互いに独立させることを意図しています。 'OrderRepository'は、データをデータベースからフェッチし、データをデータベースに保存し、OrderServiceはオーダーを管理するロジックを適用します。メソッド名を改善することによって、これらの責任を明確にするようにしてください。 'OrderRepository'の' CreateOrder'ではなく 'SaveOrder'が片道です。 –