2011-06-17 35 views
5

Tôi tự hỏi là thực hành tốt để thử tạo một khung nhìn trong mô hình xem chung?Mô hình chế độ xem chung?

Tôi tự hỏi điều này vì ai đó đã đề cập rằng anh ấy dự kiến ​​phải thực hiện nhiều mã trùng lặp trừ khi anh ấy bắt đầu tạo chế độ xem chung và kiểu xem chung.

Về cơ bản, lượt xem sẽ giống như một bộ điều khiển. Một chế độ xem có thể có 2 nút điều khiển (một hộp văn bản và nút radio) một chế độ xem khác có thể có 50 nút điều khiển trên đó.

Tất cả chúng đều có giao diện giống nhau (nó chỉ tăng theo số lượng điều khiển). Về cơ bản, ông đã suy nghĩ có một mô hình xem có trong đối tượng (đối tượng miền) nhìn vào nó và xem 50 lĩnh vực và làm cho các loại kiểm soát quyền.

Tôi đoán mẫu chỉnh sửa có thể được sử dụng để tìm ra các điều khiển tuy nhiên tôi không được bán trên mô hình chế độ xem chung.

Tôi thích generics và họ có thể làm những điều rất mạnh mẽ và trong một số trường hợp họ là tốt nhưng tôi chỉ không tổng thể điên về họ và cố gắng không sử dụng.

Tôi thấy hầu hết thời gian có thể làm giảm mã trùng lặp nhưng đôi khi nó làm cho mã trở nên phức tạp hơn. Tất nhiên điều này có thể chỉ vì tôi vẫn còn tương đối mới đối với lập trình và nó có thể vẫn ở trên mức độ kỹ năng của tôi. Vấn đề tiếp theo tôi có với nó là tôi nghĩ rằng các mô hình xem nên bằng phẳng nhất có thể và chỉ hiển thị dữ liệu thực sự được sử dụng để mọi người không bắt đầu sử dụng các thuộc tính không bao giờ được xem trong chế độ xem nơi đầu tiên.

Vấn đề tiếp theo tôi có với nó là nó có thể tiếp tục nếu bạn có một số đối tượng phức tạp có đối tượng trong đó có đối tượng trong đó. Nó có thể diễn ra trong một thời gian dài.

+0

[Vui lòng xem mã của tôi, tôi đã cố gắng đạt được điều gì đó tương tự] (https://stackoverflow.com/questions/48750809/generic-view-in-asp-net-core-2-0-using- lambda-expression) – Omar

Trả lời

3

Tôi không thấy điều gì sai với Chế độ xem chung chung. Đó là một cách hay để loại bỏ trùng lặp và giữ kiểm tra thời gian biên dịch, trái ngược với ViewBag.

Ví dụ:

Hãy tưởng tượng bạn có một tập các lớp mô hình cho Product, Category vv Mỗi lớp (ProductModel, CategoryModel) đã một màn hình và biên tập bản mẫu liên quan, mà tạo ra cái nhìn thích hợp.

Bây giờ bạn muốn xây dựng một tập hợp các trang để xem và chỉnh sửa.

Tôi thường tạo ra một Layout (trang Thạc sĩ hình thức web) để làm cho nội dung phổ biến (header, footer, menu, vv)

Sau đó, tôi sẽ tạo ra cá nhân, quan điểm mạnh mẽ, đánh máy mà chấp nhận làm người mẫu ProductViewModel , CategoryViewModel, v.v.

Bây giờ, chúng tôi cần xác định các lớp mô hình chế độ xem đó. Mỗi lớp mô hình chế độ xem phải có một phiên bản ProductModel, CategoryModel, v.v. (sẽ được chuyển đến mẫu). Nhưng cách bố trí thường đòi hỏi một số dữ liệu bổ sung (ví dụ: menu được chọn, tên người dùng đã đăng nhập, v.v ...).Giải pháp của tôi là tạo ra một ViewModel chung mà đóng gói dữ liệu trùng lặp này cho Bố cục:

public class EntityViewModel<T> 
    where T : EntityModel 
{ 
    public T Entity { get; set; } 
    public string UserName { get; set; } 
    public string SelectedMenu { get; set; } 
} 

Sau đó, bạn có thể dễ dàng tạo ra một ProductViewModel : EntityViewModel<ProductModel>, trong đó có tất cả những gì Layout cần phải render trang, và bạn có thể thêm Có thêm , dữ liệu về sản phẩm cụ thể.

+0

@ Jakub Konecki - Bạn có thể trình bày một ví dụ không. Tôi rất thích nhìn thấy một trong ít nhất và xem nó trông như thế nào (có thể nó hoàn toàn khác sau đó tôi sẽ là) – chobo2

+0

Vì vậy, thực thể bây giờ là ProductModel hoặc CategoryModel hoặc là nó ProductViewModel và CategoryViewModel? – chobo2

+0

@ chobo2 - Như bạn có thể thấy trong câu cuối 'ProductModel: EntityModel'. –

1

Theo như ViewModels đi, tôi thường có tất cả các ViewModels của tôi kế thừa từ một BaseViewModel cho thấy các phương thức hỗ trợ trong việc triển khai MVVM. Nếu bạn muốn xem một ví dụ, chỉ cần bình luận dưới đây.

+0

bạn sử dụng mẫu MVVM trong ứng dụng ASP.NET MVC? Hmm, tôi cũng muốn xem một ví dụ về điều này. –

+0

Rất thích xem ví dụ. Tôi không quen với mô hình đó. – chobo2

+0

Tôi đã không nhìn thấy các thẻ asp.net ở cái nhìn đầu tiên, tôi đã giả sử bạn đang sử dụng MVVM với một cái gì đó như Silverlight chứ không phải là MVC. Do "viewmodels" có một vị trí trong MVC? Tôi thường chỉ nhìn thấy các khung nhìn và các mô hình như các thực thể riêng biệt. – NickHeidke

5

Cá nhân tôi tránh sử dụng Generics trong các kiểu xem. Tôi đồng ý với hầu hết các lý do bạn đề cập đến đối với họ và đặc biệt này một:

Vấn đề tiếp theo tôi có với nó là tôi nghĩ rằng các mô hình điểm nên càng phẳng càng tốt và chỉ lộ dữ liệu đó là thực sự sẽ được sử dụng để mọi người không bắt đầu sử dụng tính rằng không bao giờ nên được trong chế độ xem nơi đầu tiên

ý tưởng đằng sau xem các mô hình được rằng họ cần phải được gắn đặc biệt để các yêu cầu của một cái nhìn nhất định, không làm cho họ chung (/ generic) như các mô hình miền của bạn. Tôi thích sao chép mã trong các mô hình xem so với việc có một số quái vật chung được sử dụng lại trên tất cả các khung nhìn và partials.

Và ngay cả trong trường hợp bạn cần generate dynamic forms and controls bạn không cần sử dụng các kiểu xem chung. Vì vậy, trừ khi bạn có một số kịch bản siêu cụ thể (không thể nghĩ ra bất kỳ tại thời điểm này), nó có thể là một điều tốt để tránh generics trong các mô hình xem. Điều này được nói, không loại trừ chúng hoàn toàn, nếu bạn cảm thấy rằng có một tình huống trong đó các mô hình xem chung có thể hữu ích không ngần ngại trình bày nó ở đây, bằng cách giải thích kịch bản và hiển thị tất cả các mã để chúng ta có thể thảo luận về nó.

+0

Lý do duy nhất mà tôi tìm kiếm là tìm kiếm một số người nói rằng anh ta có 200 người hay một nơi nào đó tương tự và không muốn tạo ra 200 kiểu xem riêng biệt và tôi đoán lượt xem. Tôi không chắc mình sẽ làm gì trong tình huống đó. Một điểm khác mà tôi quên thêm là cách xác thực chú thích dữ liệu. Tôi đoán bạn có thể phải đặt nó trên đối tượng miền và tôi nghĩ đó là một điều không-không. http://stackoverflow.com/questions/2138951/asp-net-mvc-generic-view-for-displaying-data-poster không đề cập đến Xem mô hình nhưng tôi giả sử anh ấy có thể đang sử dụng chúng – chobo2

+0

@Darin Dimitrov Tôi chỉ sử dụng chế độ xem để chuyển dữ liệu từ Chế độ xem sang Bộ điều khiển chứ không phải ngược lại. Ngoài ra trang của nó không, trang, bộ lọc tìm kiếm, v.v., để đọc, không thêm/sửa/xóa hoạt động. Một số bộ điều khiển cần thêm tham số như ProductCategoryId. Tôi có nên sử dụng mã kế thừa hoặc mã trùng lặp trong Viewmodel mới với các trường bổ sung không? – user2330678

0

Tôi thực sự không thích đặt logic nghiệp vụ bên trong chế độ xem. Tôi nghĩ rằng bên cạnh các thuộc tính thường xuyên và xử lý lỗi bên trong hàm tạo nên không có gì trong mô hình khung nhìn. Nó làm cho mã sạch hơn nhiều, và bạn có thể tự do bổ sung để xem mô hình. Nếu bạn có nhiều mã trùng lặp, bạn có thể cách ly nó để tách riêng viewmodel và sau đó lồng nó vào nơi bạn cần. Bằng cách này bạn cũng chỉ có những gì bạn cần trên quan điểm của bạn.

+1

Tôi không thấy bất kỳ điều gì trong câu hỏi về việc bao gồm logic trong ViewModel. –

Các vấn đề liên quan