Tôi đã kiểm tra việc triển khai phân trang trên asp.net mvc một cách cụ thể và tôi thực sự cảm thấy rằng có một cái gì đó kém hiệu quả hơn trong việc triển khai.
Trước hết tất cả các triển khai sử dụng các giá trị phân trang như dưới đây.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
Điều mà tôi cảm thấy sai là pageIndex và pageSize hoàn toàn nên là thành viên của lớp Pagination nếu không cách này có vẻ rất nhiều chức năng. Ngoài ra, nó đơn giản hóa việc vượt qua paramater không cần thiết trong các tầng ứng dụng.
Điều thứ hai là họ sử dụng giao diện bên dưới.
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; }
}
Nếu tôi muốn định tuyến phân trang của mình sang hành động khác vì vậy tôi phải tạo mô hình khung nhìn mới để đóng gói tên hành động trong đó hoặc thậm chí tên của trình điều khiển. Một giải pháp khác có thể là gửi mô hình giao thoa này để xem sau đó chỉ định hành động và bộ điều khiển được mã hóa cứng trong phương thức máy nhắn tin làm tham số nhưng tôi đang mất hoàn toàn khả năng sử dụng lại quan điểm của mình vì nó hoàn toàn phụ thuộc vào chỉ một hành động.
Một điều nữa là họ sử dụng mã dưới đây trong chế độ xem
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Nếu mô hình là IPagedList tại sao họ không cung cấp phương thức quá tải như @Html.Pager(Model)
hoặc thậm chí tốt hơn phương thức @Html.Pager()
. Bạn biết rằng chúng tôi biết loại mô hình theo cách này. Trước khi tôi làm sai vì tôi đang sử dụng Model.Page Index thay vì Model.PageNumber.
Một vấn đề lớn khác là họ mạnh mẽ dựa vào giao diện IQueryable. Làm thế nào họ biết rằng tôi sử dụng IQueryable trong lớp dữ liệu của mình? Tôi mong đợi rằng họ làm việc đơn giản với các bộ sưu tập giữ cho việc thực hiện phân trang không biết gì.
Điều gì sai về ý tưởng cải tiến của tôi đối với việc triển khai phân trang của họ? Lý do của họ để không thực hiện phân trang của họ theo cách này là gì?