Eu verifiquei as implementações de paginação no asp.net mvc especificamente e realmente sinto que há algo menos eficiente nas implementações.
Antes de tudo, todas as implementações usam valores de paginação como abaixo.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
O que eu acho errado é o pageIndex e o pageSize totalmente devem ser membros da classe Pagination, caso contrário, dessa maneira, parece muito funcional. Além disso, simplifica a passagem desnecessária de paramater em níveis de aplicação.
A segunda coisa é que eles usam a interface abaixo.
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; }
}
Se eu quiser rotear minha paginação para uma ação diferente, é necessário criar um novo modelo de exibição para encapsular o nome da ação nela ou mesmo o nome do controlador. Outra solução pode ser que, ao enviar esse modelo de interface para exibição, especifique a ação e o controlador codificados no método pager como parâmetro, mas estou perdendo totalmente a reutilização da minha visão, porque depende estritamente de apenas uma ação.
Outra coisa é que eles usam o código abaixo em vista
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Se o modelo é IPagedList, por que eles não fornecem um método de sobrecarga como esse @Html.Pager(Model)
ou ainda melhor @Html.Pager()
. Você sabe que sabemos o tipo de modelo dessa maneira. Antes de cometer um erro, porque estava usando Model.PageIndex em vez de Model.PageNumber.
Outro grande problema é que eles dependem fortemente da interface IQueryable. Como eles sabem que eu uso o IQueryable na minha camada de dados? Eu esperava que eles funcionassem simplesmente com coleções que mantêm a persistência da implementação da paginação ignorante.
O que há de errado com minhas idéias de melhoria em relação às implementações de paginação? Qual é o motivo deles para não implementar suas paginações dessa maneira?