고객의 목록을 표시해야하지만 이름 만 표시하고 목록 컨트롤의 이름에 키를 연결하려는 경우를 가정 해 보겠습니다.리포지토리 <T>에서 데이터의 하위 집합을 반환 할 수 있습니까?
전체 고객 목록 및 모든 속성을 검색하는 데 비용이 많이 듭니다. 이 시나리오에서는 필요한 속성 (이 경우 Id 및 Name)을 사용하여 다른 클래스를 만드는 것이 더 좋을까요?
기본 구현은 다음과 같을 수 있습니다 :
public class Customer {
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public int Age { get; set; }
.....
}
public class CustomerListView {
public int Id { get; set; }
public string Name { get; set; }
}
public interface IRepository<T> {
public T Find(int id);
public IEnumerable<T> FindAll();
....
}
public class Repository<T>: IRepository<T> {
....
}
public class CustomerRepository: Repository<Customer> {
public IEnumerable<CustomerListView> FindAllListView();
}
것은이 방법이 적합 할 것인가? 다른 옵션은 무엇입니까?
이것은 흥미로운 생각이며, 나는 고려하지 않았습니다. 내 저장소를 LINQ에 연결하는 것 외에도 이것을 피할 수있는 다른 이유가 있습니까? 저는 항상 저장소의 책임이 도메인 객체에 대한 액세스를 제공하는 것이라고 생각했습니다. 어느 쪽이든, 내가해야한다면 '순수한'DDD에서 벗어나도 상관 없으므로이 제안을 살펴볼 것입니다. – Joepro
LINQ는 C#의 핵심 기능이므로 걱정할 필요가 없습니다. 이 디자인 패턴은 종종 Repository로 보이지만, 무엇보다 ActiveRecord가 더 많습니다. 내가 자주하는 일은 데코레이터 패턴을 사용하고 추가 필터링을 수행하기 위해 확장 메서드를 유형에 두는 것입니다. –