これは私の実装で通常行う方法です。
基本的なCRUD構造を定義するIEntityRepositoryという汎用インターフェースです。私の実装では、私は、以下のメンバーを定義:
- 挿入
- 更新
- を
- が
- 検索(この1は、構築するために述語ビルダーを使用しているGETALL
- をGetPagedゲット
- を削除します。 where句)
IEntityRepositoryを継承する別のIMyentityRepositoryインターフェイスを作成します。これにより、エンティティ固有のメンバーを追加して、必要なときにDIを使用できるようになります。私は次に、IMyentityRepositoryを継承し、すべてのメンバーを実装する密封クラスMyentityRepositoryを作成します。
依存性注入を使用すると、具体的なタイプのMyentityRepositoryに対してインターフェース(IMyentityRepository)を登録できます。
私の場合、私は実際には行われませんでした。リポジトリの上にサービスレイヤを作成してカプセル化し、より一般的な方法で公開しました。たとえば、単純にデータベースレコードを作成するよりも多くの作業を必要とするユーザーのアカウントを作成したいとします。あなたのサービスでは、その実装で複数のリポジトリメンバーを呼び出すCreateUser()というメンバーがあります。 私のサービスレイヤーは、私のレポジトリレイヤーと同じもので構築されています。共通のCRUDメンバーのIEntityService、エンティティ固有のメンバーのIMyentityService、実装のためのMyentityServiceがあります。 MyentityServiceクラスにはIMyentityServiceのインスタンスが必要です(IoCフレームワークを選択して注入できます)。サービスレイヤでは、検証やビジネスロジックも実行できます。私はコントローラで検証を行います。まあ、技術的には、私はそれを私のコントローラに呼び出すと、私はModelStateに書き込むことができます結果を取得します。
ほんの少し役に立ちました。
インターフェイスを作成してから、それらのリポジトリを取得する具体的なクラスを作成していますか? – TampaRich
はい。ユニットテストとIoCが簡単になります。 –