J'ai vérifié les implémentations de pagination sur asp.net mvc spécifiquement et je pense vraiment qu'il y a quelque chose de moins efficace dans les implémentations.
Tout d'abord, toutes les implémentations utilisent des valeurs de pagination comme ci-dessous.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
La chose que je me sens mal est pageIndex et pageSize devraient être totalement membres de la classe de pagination, sinon cette façon semble tellement fonctionnelle. Il simplifie également le passage de paramètres inutiles dans les niveaux d'application.
La deuxième chose est qu'ils utilisent l'interface ci-dessous.
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; }
}
Si je veux router ma pagination vers une action différente, je dois donc créer un nouveau modèle de vue pour y encapsuler le nom de l'action ou même le nom du contrôleur. Une autre solution peut consister à envoyer ce modèle interfacé à la vue, puis à spécifier l'action et le contrôleur codés en dur dans la méthode de pageur comme paramètre, mais je perds totalement la réutilisation de ma vue car elle dépend strictement d'une seule action.
Une autre chose est qu'ils utilisent le code ci-dessous en vue
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Si le modèle est IPagedList, pourquoi ils ne fournissent pas une méthode de surcharge comme @Html.Pager(Model)
ou mieux encore @Html.Pager()
. Vous savez que nous connaissons le type de modèle de cette façon. Avant je faisais une erreur parce que j'utilisais Model.PageIndex au lieu de Model.PageNumber.
Un autre gros problème est qu'ils dépendent fortement de l'interface IQueryable. Comment savent-ils que j'utilise IQueryable dans ma couche de données? Je m'attendais à ce qu'ils fonctionnent simplement avec des collections qui ignorent la persistance de la mise en œuvre de la pagination.
Quel est le problème avec mes idées d'amélioration par rapport à leurs implémentations de pagination? Quelle est leur raison de ne pas mettre en œuvre leurs paginations de cette façon?