次のアプリケーションがあるシナリオを考えてみましょう。
- MVC 4 Web アプリ
- アプリケーションは、Entity Framework 5 を介して既存のデータベースと通信します (別の ORM またはデータベース プラットフォームに変更する予定はありません)。
- アプリケーションは外部の SOAP Web サービスと通信します (Web サービスは WCF に変更される場合があります)。
あなたは:
すべての EF エンティティ (MyDBRepository など) 用の汎用リポジトリと、SOAP Web サービス呼び出し用のリポジトリ (MyWSRepository など) を作成します。次に、2 つのリポジトリを使用してデータにアクセスし、すべてのコントローラーのニーズに対応する CRUD メソッドを実装するビジネス ロジックを含むサービス クラスを作成します (MyApplicationService)。次に、リポジトリをサービス クラスに注入し、最後にサービス クラスを MVC コントローラーに注入します。
または、EF によって生成された DBContext と生成されたテーブル エンティティ (MyDBService など) を使用して db クエリとビジネス ロジックを処理する 1 つのサービス クラスと、ビジネス ロジックと SOAP Web サービス呼び出し (MySOAPWebService など) を処理する別のサービス クラスがあります。次に、両方のサービスを MVC コントローラーに挿入します。
または、他の何か。
過去にオプション 1 を使用したことがあります。しかし、それは不要な抽象化レイヤーを追加しているだけなのだろうかと思っています。Entity Framework が DBContext を生成する場合、DBContext エンティティを直接使用するサービス クラスを使用することはそれほど複雑ではないようです。
StackOverflow のいくつかの記事やその他の質問を読んだところ、Service Locator パターンと Repository パターンを区別する灰色の線があるようです。
どの構造を使用しますか?