솔리드 교장에 대한 연구를하고 있으며 저장소 패턴의 구현에 몇 가지 문제점을 발견했습니다. 나는 각 문제를 설명 할 것이고, 내가 틀렸다면 나를 바로 잡으십시오.리포지토리 패턴은 SOLID 원칙을 준수합니까?
문제는 1
저장소 패턴은 단일 책임 원칙
하자 우리가
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);
}
로 정의한 인터페이스를 가지고 있다고 (이 S)를 명확하게 위반 나누기 단일 책임 원리는 w 우리는이 인터페이스를 구현합니다. 하나의 클래스에서 우리는 Command와 Query를 둘 다 넣고 있습니다. 그리고 이것은 예상되지 않습니다.
문제 2
저장소 패턴 인터페이스 분리의 원칙 (I)
우리는 위의 인터페이스의이 구현이 말을 나누기.
첫 번째 구현
CustomerRepository : IRepository<Customer>
{
//All Implementation
}
두 번째 구현
ProductRepository : IRepository<Product>
{
//All Implementation except Delete Method. So Delete Method Will be
void Delete (Product product){
throw Not Implement Exception!
}
}
그리고 ISP에 따라 "어떤 클라이언트가 사용하지 않는 방법에 의존하도록 강요해서는 안된다." 그래서 우리는 ISP에 위배된다는 것을 분명히 알았습니다.
제 이해는 저장소 패턴이 SOLID 원칙을 따르지 않는다는 것입니다. 어떻게 생각해? 교장을 위반하는 패턴의 유형을 선택해야하는 이유는 무엇입니까? 너의 의견이 필요해.
고맙습니다 @ 로버트, 매우 도움이됩니다. –
@AnkitSarkar'IRepository'은 사용하지 않을 때는 자체적으로 안티 패턴입니다. http://codebetter.com/gregyoung/2009/01/16/ddd-the-generic-repository/ –
plalx