リポジトリとサービス パターンを使用するアプリケーションで、リポジトリが直接呼び出されるのではなく、サービス レイヤーが常に呼び出されるようにするにはどうすればよいですか?
例 :
class OrderRepository
{
void CreateOrder(Order o)
...
}
class OrderService
{
void CreateOrder(Order o)
{
//make some business logic tests
...
//call repository
_orderRepository.CreateOrder(o);
}
}
2 つの問題があります。
プログラマーは、サービスの存在を知らないため、リポジトリを直接呼び出すことができます (この例のように単純ではない場合があります (1 つのサービス = 同じメソッド名を持つ 1 つのリポジトリ)。一部のアプリケーションは十分に文書化されていません。急いでいると、対応するサービスが存在するかどうかを確認するのを忘れる可能性があります (間違い))。
まったく違う : 昔、誰かが注文リポジトリを直接使用するいくつかのビュー + コントローラーを作成しました。その時点では、ビジネス ロジックのチェックや追加の操作を行う必要はなく、注文リポジトリだけが存在していました (まったく必要がなかったため)。後で注文を作成するときに追加の操作が必要になる場合は、サービスが作成されます。問題は、古いリポジトリを呼び出すすべてのコントローラーを変更する必要があることです。リポジトリの原則/アイデア (およびレイヤーでのコードの分離) は、パーツを互いに独立させることになっているのではありませんか?