ฉันได้ตรวจสอบการแบ่งหน้าใน 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.PageIndex แทน Model.PageNumber
อีกประเด็นใหญ่คือพวกเขาพึ่งพาอินเตอร์เฟซ IQueryable อย่างยิ่ง พวกเขารู้ได้อย่างไรว่าฉันใช้ IQueryable ในชั้นข้อมูลของฉัน ฉันคาดหวังว่าพวกเขาจะทำงานกับคอลเลกชันที่ทำให้การใช้งานคงอยู่ไม่รู้ลืม
มีอะไรผิดปกติเกี่ยวกับแนวคิดการปรับปรุงของฉันเกี่ยวกับการใช้เลขหน้าของพวกเขา อะไรคือเหตุผลของพวกเขาที่จะไม่ใช้การแบ่งหน้าด้วยวิธีนี้?