특히 asp.net mvc에서 페이지 매김 구현을 확인했으며 실제로 구현에 덜 효율적인 것이 있다고 생각합니다.
우선 모든 구현은 아래와 같은 페이지 매김 값을 사용합니다.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
내가 잘못 느낀 것은 pageIndex와 pageSize가 Pagination 클래스의 멤버 여야한다는 것입니다. 또한 적용 계층에서 불필요한 매개 변수 통과를 단순화합니다.
두 번째는 인터페이스 아래에서 사용한다는 것입니다.
public interface IPagedList<T> : IList<T>
{
int PageCount { get; }
int TotalItemCount { get; }
int PageIndex { get; }
int PageNumber { get; }
int PageSize { get; }
bool HasPreviousPage { get; }
bool HasNextPage { get; }
bool IsFirstPage { get; }
bool IsLastPage { get; }
}
페이지 매김을 다른 액션으로 라우팅하려면 액션 이름 또는 컨트롤러 이름으로 캡슐화하기위한 새보기 모델을 만들어야합니다. 또 다른 해결책은이 인터페이스 모델을 보내서 호출기 메소드에서 매개 변수로 하드 코딩 된 액션 및 컨트롤러를 지정하지만 하나의 액션에만 엄격하게 의존하기 때문에 뷰의 재사용을 완전히 잃어 버릴 수 있습니다.
또 다른 것은 그들이보기에서 아래 코드를 사용한다는 것입니다.
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
모델이 IPagedList 인 경우 왜 @Html.Pager(Model)
또는 더 나은 방법으로 과부하 방법을 제공하지 않는가 입니다 @Html.Pager()
. 우리는 이런 식으로 모델 유형을 알고 있습니다. Model.PageNumber 대신 Model.PageIndex를 사용했기 때문에 실수하기 전에.
또 다른 큰 문제는 IQueryable 인터페이스에 크게 의존한다는 것입니다. 데이터 계층에서 IQueryable을 사용한다는 것을 어떻게 알 수 있습니까? 나는 그것들이 페이지 매김 구현 지속성을 무지한 컬렉션으로 간단하게 작동 할 것으로 기대했다.
페이지 매김 구현에 대한 개선 아이디어에 어떤 문제가 있습니까? 이 방법으로 페이지 매김을 구현하지 않는 이유는 무엇입니까?