Hãy nói rằng tôi đang viết một ứng dụng web blog bằng cách sử dụng mô hình MVC. Bố cục điển hình cho trang chính của ứng dụng blog là - một số loại chỉ mục bài đăng trong phần chính và bên cạnh đó có một số phần bổ sung, như dòng thời gian, bảng điều hướng thẻ, bảng đăng ký, v.v. Những điều khiển đó cũng xuất hiện trên một xem bài đăng, và có thể xuất hiện trên các quan điểm khác tôi có.
Câu hỏi của tôi là - làm thế nào tôi nên xử lý các bảng đó sang một bên trong quan điểm và bộ điều khiển của tôi. Tôi thấy ba cách tiếp cận ở đây:
Tạo một lớp viewmodel lớn chứa tất cả thông tin cần thiết để hiển thị s view (chỉ mục hoặc bài đăng đơn). Trong trường hợp đó, tôi có thể làm cho các bảng này sang một bên một khung nhìn và gọi chúng từ chế độ xem được hiển thị thông qua một phần của khung nhìn lớn đó. Hạn chế là - Tôi sẽ có mã điền viewmodel trong các phương thức điều khiển khác nhau, nghĩa là mã được sao chép. Mà là khá xấu.
Tạo một lớp kết xuất khung nhìn khác. Giả sử, lớp kết xuất trên cùng nhất ghi lại một phần được kết xuất hoàn toàn của html hoặc các hàm mà khi được gọi sẽ xuất ra một html. Lớp bên dưới "lớp kết hợp" này sẽ chỉ cung cấp một phần cho mỗi bảng tôi muốn, bao gồm nội dung chính. Hạn chế ở đây - sử dụng bộ nhớ. Hầu hết các khung hiện đại kết xuất trực tiếp các html thành luồng đầu ra, nhưng theo cách tiếp cận này, các khung nhìn một phần sẽ được hiển thị thành các đối tượng chuỗi trước - dẫn đến chi phí bộ nhớ.
- Sử dụng một cái gì đó như "RenderAction" từ asp.net mvc, gọi phương thức điều khiển từ chế độ xem. Tôi nghĩ rằng đây là một giải pháp tồi tệ nhất trong 3 được đưa ra, bởi vì nó bỏ đi một cách tiếp cận MVC.
Câu hỏi không gắn liền với bất kỳ khuôn khổ cụ thể nào, tôi muốn hiểu cách làm việc chung như thế.
CẬP NHẬT
Sau khi có câu trả lời, tôi phát hiện ra rằng bài đăng không rõ ràng. Vì vậy, cập nhật hợp lý ở đây:
Theo thuật ngữ viewmodel, tôi hiểu một đối tượng chứa tất cả dữ liệu cần thiết để hiển thị một chế độ xem cụ thể.
Tất cả ba cách tiếp cận liên quan đến việc xây dựng các khung nhìn một phần với khung nhìn riêng của chúng. Ví dụ: (sử dụng cú pháp C #):
class SinglePostViewModel {
string Text {get;set;}
string Title {get;set;}
string Slug {get;set;}
DateTime PublishedDate {get;set;}
...
}
class TagNavigationPanelViewModel {
string TagText {get;set;}
int PostsCount {get;set;}
}
class CalendarNavigationPanelViewModel {
DateTime YearAndMonth {get;set;}
int PostsCount {get;set;}
}
Câu hỏi của tôi là - làm thế nào để kết hợp độc đáo những quan điểm một phần với nhau.