Ich habe das hier:
public interface IRepository<T> where T : class
{
void Delete(T entity);
void Add(T entity);
void Attach(T entity);
void Detach(T entity);
void SaveChanges();
}
Jetzt mache ich für jede meiner Entitäten konkrete Klassen, die das generische IRepository implementieren =>
public class SchoolclassRepository : IRepository<Schoolclass>
{
public void Delete(Schoolclass entity)
{
throw new NotImplementedException();
}
public void Add(Schoolclass entity)
{
throw new NotImplementedException();
}
public void Attach(Schoolclass entity)
{
throw new NotImplementedException();
}
public void Detach(Schoolclass entity)
{
throw new NotImplementedException();
}
public void SaveChanges()
{
throw new NotImplementedException();
}
}
Im Konstruktor meines ViewModels (mvvm-Muster) mache ich folgendes =>
IRepository<Schoolclass> repo = new SchoolclassRepository();
Welchen Vorteil bietet IRepository, wenn ich den Code für meine CRUD-Operationen ohnehin in jeder Entitätsklasse schreiben muss?
In den Klassen Customer, Product, Pupil implementiere ich die IRepository<Product>
, IRepository<Customer>
, IRepository<Pupil>
usw... und ich implementiere die Methoden der Schnittstelle.
Warum konnte ich nicht sagen =>
SchoolclassRepository repo = new SchoolclassRepository(); ???
Ich möchte nicht die Möglichkeit haben, Unit-Tests für eine kleine Anwendung zu schreiben.