본문 바로가기

백엔드/닷넷

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

반응형

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

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

 

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

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

jin-co.tistory.com

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

int Take { get; }
int Skip { get; }
bool IsPagingEnabled { get; }

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

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

페이지네이션 기능을 추가하는 메서드를 추가

protected void ApplyPaging(int skip, int take)
{
  Skip = skip;
  Take = take;
  IsPagingEnabled = true;
}

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

if (spec.IsPagingEnabled)
{
  query = query.Skip(spec.Skip).Take(spec.Take);
}

페이지네이션 매개변수 정리차원에서 클래스를 생성하겠습니다

생성한 클래스에 속성을 추가합니다

private int MaxPage = 20;
public int PageIndex { get; set; } = 1;
private int _pageSize = 3;
public int PageSize
{
  get => _pageSize;
  set => _pageSize = (value > MaxPage) ? MaxPage : value;
}

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

컨트롤러로 이동하여 정렬기준 매개변수를 추가하고 코어 프로젝트에 아이템이 적용하는 클래스에 전달합니다. 주의할 점은 지금처럼 매개변수로 클래스를 사용하는 경우 매개변수가 요청의 바디로 들어가기 때문에 매개변수 앞에 '[FromQuery]'를 붙여서 쿼리임을 표시해 주어야 합니다

실행

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

cd /API

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

dotnet watch

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

 

728x90
반응형