Ich mache einige Nachforschungen über SOLID Principal und fand einige Probleme in Implementierungen von Repository-Muster. Ich werde jedes Problem erklären, bitte korrigieren Sie mich, wenn ich falsch liege.Befolgt das Repository-Muster SOLID-Prinzipien?
Problem 1
Repository Pattern Breaks Einzel Verantwortung Prinzip (S)
Let sagen wir eine Schnittstelle haben, die als
definierenpublic 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);
}
Klar es verletzt das Prinzip der einheitlichen Verantwortung, weil w Wenn wir diese Schnittstelle implementieren, setzen wir in einer einzigen Klasse sowohl Command als auch Query ein. und das wird nicht erwartet.
Problem 2
Repository Pattern Breaks Schnittstelle Segregation Prinzip (I)
sagen, wir haben 2 Umsetzung der oben Schnittstelle.
Erste Implementierung
CustomerRepository : IRepository<Customer>
{
//All Implementation
}
Zweite Implementierung
ProductRepository : IRepository<Product>
{
//All Implementation except Delete Method. So Delete Method Will be
void Delete (Product product){
throw Not Implement Exception!
}
}
Und laut ISP "soll kein Kunde gezwungen werden, auf Methoden angewiesen es nicht verwenden." So haben wir gesehen, dass es eindeutig auch gegen den ISP verstößt.
So ist mein Verständnis Repository Muster nicht SOLID Haupt folgen. Was denken Sie? Warum sollten wir diese Art von Mustern wählen, die gegen den Auftraggeber verstoßen? Brauchen Sie Ihre Meinung?
Dank @Robert, Sehr hilfreich. –
@AnkitSarkar Das 'IRepository' ist ein Anti-Pattern für sich, wenn es nicht korrekt verwendet wird. http://codebetter.com/gregyoung/2009/01/16/ddd-the-generic-repository/ –
plalx