мне кажется, что многие специализированные классы репозитория имеют сходные характеристики, и было бы целесообразно, чтобы эти классы реализовали интерфейс, который обрисовывает в общих чертах эти характеристики, создавая общий репозиторий
чтобы проиллюстрировать мою точку зрения, скажем, у нас есть этот код
public class IEntity
{
public int Id;
}
public interface IRepository<T> where T: IEntity
{
IEnumerable<T> List { get; }
void Add(T entity);
void Delete(T entity);
void Update(T entity);
T FindById(int Id);
}
[Table("Author")]
public partial class Author : IEntity
{
public int Id { get; set; }
[Required]
public string authorname { get; set; }
}
а затем мы переходим к реализации этих интерфейсов для создания наших конкретных хранилищ
public class AuthorRepository : IRepository<Author>
{
Model1 _authorContext;
public AuthorRepository()
{
_authorContext = new Model1();
}
public IEnumerable<Author> List
{
get
{
return _authorContext.Authors;
}
}
public void Add(Author entity)
{
_authorContext.Authors.Add(entity);
_authorContext.SaveChanges();
}
public void Delete(Author entity)
{
_authorContext.Authors.Remove(entity);
_authorContext.SaveChanges();
}
public void Update(Author entity)
{
_authorContext.Entry(entity).State = System.Data.Entity.EntityState.Modified;
_authorContext.SaveChanges();
}
public Author FindById(int Id)
{
var result = (from r in _authorContext.Authors where r.Id == Id select r).FirstOrDefault();
return result;
}
}
перед тем, как реализовать это, я провел небольшое исследование о том, была ли это хорошая идея или нет, и всю информацию, которую я смог найти, были утверждения, называющие это анти-паттерном, но без объяснения причин.
Почему универсальный репозиторий считается антишаблоном?