문제

내 응용 프로그램은 대량의 데이터를 처리해야하며 일반적인 선택 크기는 약 10000 행입니다. 성능을 향상시키기 위해 필요한 데이터 만 선택하는 것이 좋습니다.

계산 또는 의미있는 비즈니스를 수행해야 할 때 모델을 올바르게 인스턴스화하기 위해 모든 데이터를 선택하는 데 편안합니다.

데이터를 보는 경우 (대부분 테이블에서) 이것은 내가 원하는 것이 아니며, 검색된 데이터의 양을 절대 최소값으로 제한하고 싶습니다.

지금까지 나는 내 리포지토리에서 데이터를 얻기 위해 다음 접근법을 사용했습니다 (아래 그림은 모든 마법을 수행하는 방법입니다. 내부에 저장소 :

private IEnumerable<TResult> GetAllProject<TResult>(Expression<Func<T, TResult>> selector, Expression<Func<T, bool>> predicate)
{
    SetReadContext();
    var query = DataContex.Table<Order>().Where(predicate).Select(selector);

    return query.ToList();
}

이렇게하면 저장소를 호출하는 메소드에서 Annonymous 유형에 대한 유형 정의가 있으며 유형으로 투명하게 작업 할 수 있습니다.

모든 컨트롤러는보기에 전달할 데이터를 정확하게 정의 할 수 있으며, 열 순서 등에 직접 영향을 줄 수 있기 때문에 매우 효율적입니다. 선택기를 기반으로 한 것으로 표시되기 때문에 DataContext에로드 옵션이 필요하지 않습니다.

문제는 이제 저장소에 전달되는 선택기를 제어하지 않는다는 것입니다. 변환 할 수없는 메소드 호출 등이 포함될 수 있습니다.

내 질문은 다음과 같습니다.

  1. 지금까지 나는 유형 폭발을 두려워하기 때문에 뷰 모델을 만드는 것을 피했습니다. 이를 구현하는 가장 좋은 방법은 무엇입니까? 나에게 투사를하는 셀렉터를 사용할 수 있도록해야합니까?
  2. 쿼리가 예외없이 실행되는 경우를 확인하는 단위 테스트를 작성해야합니까?
도움이 되었습니까?

해결책

알려진 클래스 세트로 작업 할 수 있도록 뷰 모델을 만드는 것이 좋습니다. 유형 폭발은 실제로 관심이 아닙니다. 현재 어쨌든 익명 유형을 사용하고 있기 때문에 관리하기가 조금 더 어려울 것입니다.

(보통) 뷰 당 단일 뷰 모델이 있으면 공짜로 깨끗하게됩니다. 경우에 따라 뷰 모델이 더 많은 데이터/필드가 필요하고 다른 소비자는 부풀어 오른 뷰 모델로 끝나기 때문에 뷰 모델을 공유 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top