me parece que muchas clases de repositorios especializados comparten características similares, y tendría sentido que estas clases implementaran una interfaz que describa estas características, creando un repositorio genérico
para ilustrar mi punto, digamos que tenemos este código
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; } }y luego vamos a implementar estas interfaces para crear nuestros repositorios específicos
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; } }Antes de implementar esto, investigué un poco sobre si era una buena idea o no, y toda la información que pude encontrar fueron declaraciones que lo llamaban antipatrón pero sin explicar por qué.
¿Por qué un repositorio genérico se considera un antipatrón?