Sto facendo qualche ricerca sul principio SOLID e ho trovato alcuni problemi nelle implementazioni del modello di repository. Ho intenzione di spiegare ogni singolo problema, per favore correggimi se sbaglio.Il modello di deposito segue i principi SOLID?
Problema 1
Repository modello Breaks principio responsabilità singola (S)
Let dire che abbiamo un interfaccia che definiscono
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);
}
Chiaramente viola il principio della responsabilità unica perché w Quando implementiamo questa interfaccia, in una singola classe mettiamo sia Command and Query entrambi. e questo non è previsto.
Problema 2
Repository Motivo breaks Interface principio della segregazione (I)
Say Abbiamo 2 Esecuzione del sopra Interface.
prima implementazione
CustomerRepository : IRepository<Customer>
{
//All Implementation
}
seconda implementazione
ProductRepository : IRepository<Product>
{
//All Implementation except Delete Method. So Delete Method Will be
void Delete (Product product){
throw Not Implement Exception!
}
}
E come da ISP "Nessun cliente dovrebbe essere costretto a dipendere da metodi che non utilizza." Quindi abbiamo visto chiaramente che viola anche l'ISP.
Quindi, la mia comprensione è che il pattern Repository non segue il principal SOLID. Cosa ne pensi? Perché dovremmo scegliere questo tipo di modello che viola il preside? Hai bisogno della tua opinione.
Grazie @Robert, molto utile. –
@AnkitSarkar L''Ipository 'è un anti-pattern di per sé quando non viene utilizzato corretamente. http://codebetter.com/gregyoung/2009/01/16/ddd-the-generic-repository/ –
plalx