いくつかのリポジトリがあり、それらにインターフェースを実装させたいのですが、実装方法は同じでなければなりません-選択、挿入など。しかし、実装方法は変更されます。いくつかの代替案がありますが、より良いものはどれですか?
interface IRepository
{
List<T> Select();
int Insert(T);
}
いくつかのリポジトリがあり、それらにインターフェースを実装させたいのですが、実装方法は同じでなければなりません-選択、挿入など。しかし、実装方法は変更されます。いくつかの代替案がありますが、より良いものはどれですか?
interface IRepository
{
List<T> Select();
int Insert(T);
}
インターフェイスを作成し、そのインターフェイスをクラスに実装できます。
public interface IRepository<T> where T:class
{
IQueryable<T> GetAll();
T GetById(object id);
void Insert(T entity);
void Update(T entity);
}
ここでも、リポジトリ パターンと作業単位パターンを使用できます。
public class Repository<T>:IRepository<T> where T:class
{
private DbContext context = null;
private DbSet<T> dbSet = null;
public Repository(DbContext context)
{
this.context = context;
this.dbSet = context.Set<T>();
}
#region IRepository
public void Insert(T entity)
{
dbSet.Add(entity);
}
public IQueryable<T> GetAll()
{
return dbSet;
}
public void Update(T entity)
{
if (entity == null)
throw new ArgumentNullException("entity");
this.context.SaveChanges();
}
#endregion
}
この場合、任意のタイプのオブジェクトを渡すことができます。詳細と例については、こちらを確認してください