0

リポジトリとサービス パターンを使用するアプリケーションで、リポジトリが直接呼び出されるのではなく、サービス レイヤーが常に呼び出されるようにするにはどうすればよいですか?

例 :

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 つのリポジトリ)。一部のアプリケーションは十分に文書化されていません。急いでいると、対応するサービスが存在するかどうかを確認するのを忘れる可能性があります (間違い))。

  • まったく違う : 昔、誰かが注文リポジトリを直接使用するいくつかのビュー + コントローラーを作成しました。その時点では、ビジネス ロジックのチェックや追加の操作を行う必要はなく、注文リポジトリだけが存在していました (まったく必要がなかったため)。後で注文を作成するときに追加の操作が必要になる場合は、サービスが作成されます。問題は、古いリポジトリを呼び出すすべてのコントローラーを変更する必要があることです。リポジトリの原則/アイデア (およびレイヤーでのコードの分離) は、パーツを互いに独立させることになっているのではありませんか?

4

2 に答える 2

1

すべてのリポジトリとサービスがそれぞれのプロジェクトに含まれるようにソリューションを構成できます。RepositoriesおよびServices

Repositories参照する必要がある唯一のプロジェクトはServicesです。このように、他のプロジェクトはリポジトリにアクセスできません。もちろん、開発者がリポジトリプロジェクトをコントローラプロジェクトに含めることを妨げるものは何もありませんが、うまくいけば、この時点で、そもそもなぜそれが含まれていなかったのかを自問するでしょう。

于 2012-04-26T19:47:30.263 に答える
1

静的分析ツールは、この点で役立ちます。

nDependは、ビルド プロセスに統合できる商用ツールであり、そのような状態 (リポジトリ クラスを直接呼び出すサービス クラス以外) でエラーが発生します。

于 2012-04-26T19:38:34.230 に答える