Ich habe Paginierungsimplementierungen auf asp.net mvc speziell geprüft und ich habe wirklich das Gefühl, dass Implementierungen etwas weniger effizient sind.
Zuallererst verwenden Implementierungen Paginierungswerte wie unten.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
Die Sache, die ich falsch fühle, ist pageIndex und pageSize sollten total Mitglied der Paginierungsklasse sein, andernfalls sieht diese Weise so funktionell aus. Es vereinfacht auch unnötige Parameterübergaben in Anwendungsebenen.
Die zweite Sache ist, dass sie unter der Schnittstelle verwenden.
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; }
}
Wenn ich meine Paginierung auf eine andere Aktion umleiten möchte, muss ich ein neues Ansichtsmodell erstellen, um den Aktionsnamen oder sogar den Controllernamen darin einzuschließen. Eine andere Lösung kann sein, dass Sie dieses Schnittstellenmodell zur Ansicht senden und dann die Aktion und den Controller als Parameter in der Pager-Methode fest codieren. Ich verliere jedoch die völlige Wiederverwendbarkeit meiner Ansicht, da diese ausschließlich von nur einer Aktion abhängt.
Eine andere Sache ist, dass sie den folgenden Code in view verwenden
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Wenn das Modell IPagedList ist, warum bieten sie keine Überladungsmethode wie @Html.Pager(Model)
oder noch besser eine @Html.Pager()
. Sie wissen, dass wir den Modelltyp auf diese Weise kennen. Vorher habe ich einen Fehler gemacht, weil ich Model.PageIndex anstelle von Model.PageNumber verwendet habe.
Ein weiteres großes Problem ist, dass sie stark auf die IQueryable-Schnittstelle angewiesen sind. Woher wissen sie, dass ich IQueryable in meiner Datenschicht verwende? Ich würde erwarten, dass sie einfach mit Sammlungen arbeiten, die die Implementierung von Paginierungspersistenz ignorieren.
Was ist falsch an meinen Verbesserungsideen gegenüber ihren Paginierungsimplementierungen? Was ist ihr Grund, ihre Paginierungen nicht auf diese Weise umzusetzen?