본문 바로가기

백엔드/닷넷

지네릭 레포지토리 스페시피케이션 패턴 - 정렬기능 추가하기

반응형

스페시피케이션 패턴의 단점 중 하나는 콘텍스트에서 기본제공하는 기능의 일부를 사용할 수 없다는 점입니다. 스페시피케이션 패턴에 정렬기능을 추가하는 방법을 보겠습니다.

지네릭 레포지토리 패턴 설정하기

 

관계형 데이터 불러오기 (참조 데이터 포함) - 지네릭 레포지토리 패턴

엔티티프레임워크를 사용하여 관계형 테이블에서 참조하는 데이터를 포함하여 데이터를 불러오는 방법을 보겠습니다. 구현하기 애플리케이션 생성 .NET web-API 생성하기 개발도구 설치하기 .NET

jin-co.tistory.com

스페시피케이션 인터페이스에 정렬을 위한 메서드를 추가

Expression<Func<T, object>> OrderBy { get; }
Expression<Func<T, object>> OrderByDesc { get; }

스페시피케이션 클래스로 이동하여 추가한 메서드를 구현하고

아래와 같이 getter와 setter를 추가합니다

정렬기능을 추가하는 메서드를 추가

protected void AddOrderBy(Expression<Func<T, object>> orderByExpression)
{
  OrderBy = orderByExpression;
}
    
protected void AddOrderByDesc(Expression<Func<T, object>> orderByDescExpression)
{
  OrderByDesc = orderByDescExpression;
}

인프라스트럭처 폴더에 스페시피케이션에 쿼리와 개체를 추가하는 클래스로 이동하여 아래 코드를 추가합니다

if (spec.OrderBy != null)
{
  query = query.OrderBy(spec.OrderBy);
}
      
if (spec.OrderByDesc != null)
{
  query = query.OrderByDescending(spec.OrderByDesc);
}

코어 프로젝트에 아이템이 적용하는 클래스에 정렬을 위한 매개변수를 추가하고 정렬쿼리를 추가합니다


※ 조건을 추가하여 아래와 같이 여러 정렬조건을 지정하는 것도 가능합니다

if (!string.IsNullOrEmpty(sort))
{
  switch (sort)
  {
    case "quantityAsc":
      AddOrderBy(i => i.Quantity);
      break;
    case "quantityDesc":
      AddOrderByDesc(i => i.Quantity);
      break;
    default:
      AddOrderBy(i => i.Name);
      break;
  }
}


컨트롤러로 이동하여 정렬기준 매개변수를 추가하고 코어 프로젝트에 아이템이 적용하는 클래스에 전달합니다

실행

작업이 완료되면 API 폴더로 이동하여

cd /API

아래 명령어로 앱을 실행합니다.

dotnet watch

이상으로 스페시피케이션 패턴에서 정렬기능을 추가하는 방법을 보았습니다.

 

728x90
반응형