मैंने विशेष रूप से asp.net mvc पर पृष्ठांकन कार्यान्वयन की जाँच की है और मुझे वास्तव में लगता है कि कार्यान्वयन में कुछ कम कुशल है।
सबसे पहले सभी कार्यान्वयन नीचे की तरह पृष्ठांकन मूल्यों का उपयोग करते हैं।
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
जो चीज मुझे गलत लगती है वह है पेजइंडेक्स और पेजसाइज पूरी तरह से पेजेशन क्लास का सदस्य होना चाहिए अन्यथा यह तरीका इतना कार्यात्मक तरीका दिखता है। इसके अलावा, यह आवेदन के स्तरों में अनावश्यक पैरामाटर पास को सरल बनाता है।
दूसरी बात यह है कि वे नीचे इंटरफेस का उपयोग करते हैं।
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 का उपयोग करता हूं? मुझे उम्मीद है कि वे केवल संग्रह के साथ काम करेंगे जो कि पेजिनेशन कार्यान्वयन दृढ़ता बनी हुई है।
उनके पृष्ठांकन कार्यान्वयन पर मेरे सुधार विचारों के बारे में क्या गलत है? इस तरह से उनके पेजिंग्स को लागू न करने का क्या कारण है?