まとめになるかはわかりません。タイトルを思いつかなかっただけです。
Repository for ASP.NET MVC - しばやん雑記 で Repository の使い方をちょろーんと書きましたが、IRepository
なので、今回は共通部分は実装してしまおうという方向。
// 共通の Repository インターフェース public interface IRepository<T> { void Add(T entity); void Remove(T entity); IList<T> ListAll(); } // Bookmark 専用のインターフェース public interface IBookmarkRepository : IRepository<Bookmark> { Bookmark Find(string url); } // 共通部分は先に実装しておく public class Repository<T> : IRepository<T> { // 実装は省略 public void Add(T entity) { ... } public void Remove(T entity) { ... } public IList<T> ListAll() { ... } } // 実際に DB から引っ張ってくる Repository public class BookmarkRepository : Repository<Bookmark>, IBookmarkRepository { public Bookmark Find(string url) { // 実装は省略 } }
そして、ジェネリックを使ってるので、エンティティクラスごとに Repository を作る必要が無くなったわけです。特殊なメソッドが必要な場合は IRepository
実際に LINQ to SQL や Entity Framework を使うときに、DataContext などをどうしようという問題が出てきます。Repository
今は LINQ to SQL だけど、将来的には Entity Framework に切り替えたい!という時には、さらに抽象化しないとダメな予感。*1
*1:LINQ to SQL -> Entity Framework ぐらいなら直接書き換えるほうが手間がかからない気もする……