はEF Frameworkを使用して、小さなリポジトリー柄チュートリアルです:
someRepository.Find.Where(something => something.IsRed && something.IsBig)
データアクセスのためのすべてのメソッドを含むタイプT
の「IRepository」と呼ばれる一般的なインタフェースを作成します。
それは次のようになります。
interface IRepository<T> where T : class
{
IEnumerable<T> FindAll(Expression<Func<T, bool>> exp);
T FindSingle(Expression<Func<T, bool>> exp);
// And many more!
}
は、このインタフェースを実装する抽象「リポジトリ」クラスを作成します。
class Repository<T> : IRepository<T> where T : class
{
TestDataContext _dataContext = TestDataContext(); // Would be your EF Context
public IEnumerable<T> FindAll(Expression<Func<T, bool>> exp)
{
_dataContext.GetTable<T>().Where<T>(exp);
}
public T FindSingle(Expression<Func<T, bool>> exp)
{
_dataContext.GetTable<T>().Single(exp);
}
// And many more!
}
我々は今、私たちを実装ModelClass
テーブル/オブジェクトのためのインタフェースを作成することができます'IRepository'と抽象的な 'Repository'クラスを拡張し、 'IModelClassInterface'を実装する具象クラス:
interface IModelClassRepository : IRepository<ModelClass>
{
}
それはあなたに多くの柔軟性だけでなく、あなたが持っているすべての小さなエンティティを制御するのに十分な力を与えるように私はこのアプローチを使用することをお勧めし
class ModelClassRepository : Repository<ModelClass>, IModelClassRepository
{
}
:
そして、それを実現するために、一致するリポジトリ。
これらのメソッドを呼び出すと、そのように超簡単になります。
ModelClassRepository _repo = new ModelClassRepository();
_repo.Find.Where(something => something.IsRed && something.IsBig)
はい、それはあなたがいくつかの仕事をしなければならないが、地獄あなたが後でデータソースを変更するために簡単であることを意味します。
EFフレームワークを任意のデータプロバイダで切り替えることもできます。それはXML、db4o、または普通の古いTxtです。
リポジトリ私の見解では、良いデータベース抽象化ツールに加えてパターンを使用する必要があります。 –
ええ、リポジトリパターンを使用して、コードが特定のデータベースに依存しないようにしてから、Entity Frameworkなどの適切なormを使用して、SQLと変更追跡の処理の頭痛を取り除きます。 – rtpHarry