私が学んだ限り、IRepository
にはCRUD
が含まれているはずです。次に、IRepository
のような他のインターフェイスでこのIProduct
を継承し、IProduct
concreteクラスProductRepository
をGetAllProducts()
、Top5Products()
。
N層アーキテクチャでも同じことができます。のように、_DAL Class Library
_を作成し、その中でGetAllProducts()
、Top5Products()
などのメソッドを使用してクラスProduct
を定義します。
_DAL.Product
_クラスと_Repo.ProductRepository
_クラスの両方で、_DB Context
_の_Entity Framework
_を初期化し、関連データをクエリします。
呼び出しは、BLL
の_Repo.ProductRepository
_または_DAL.Product
_メソッドの両方で類似しています
これらの類似点を考慮して、私の質問はレポの利点は何ですか? (Controller
、_BLL Class Library
_、_DAL Class Library
_)を使用したn層アーキテクチャを使用すると、同じように簡単に同じことができます。
私の理解は:
[〜#〜] dal [〜#〜](データアクセスレイヤー)は、ソフトウェアのレイヤーを指します永続化テクノロジとアプリケーションロジックの間。その目的は、データアクセスの問題を他のアプリケーションの問題と区別することです。 generalの概念です。
Repositoryは、DDD(ドメイン駆動設計)のコンセプトです。
DDDでは、Repositoryは、特定のAggregateのすべてのデータアクセスの懸念をカプセル化する責任があります。これには、Aggregateの読み取りおよび書き込み中に一貫性を確保する責任が伴います。また、Aggregateは関連するエンティティのグループです(例:Product
、Store
など)。
したがって、リポジトリは具体的には集約の永続性と一貫性の問題を認識しています。 generalDALは、specificリポジトリで構成される可能性が高い
2つの異なる補完的な概念を比較しています:
例のDAL
興味深いことに、クラスライブラリの例では、DAL.Product
はリポジトリのようです。したがって、実際には違いが見られないのは正常です。実装の観点からは、同じです(この特定の場合)。
しかし、そうする必要はありません。 DALは、たとえば次のように異なる方法で実装できます。
リポジトリの違い
リポジトリの概念は、アーキテクチャモデルと実装には依存しません。レイヤーやデータベースを考える必要はありません。ドメインを設計するときに知っておく必要があるのは、オブジェクトが、永続性を提供する特別な種類のコレクションであるリポジトリにあるということだけです。これはそれらをドメイン設計に非常に適しており、なぜそれらが ドメイン駆動設計 の重要な要素であるかを説明します。
DDDでは、リポジトリにはいくつかのルールがあります。これらは、アグリゲート(独立したエンティティ、またはアグリゲートルートに依存する関連エンティティのグループ)へのアクセスを提供し、アグリゲートごとに1つのリポジトリがあります。