2012-06-26 33 views
9

Tôi đã nghiên cứu cấu trúc dự án asp.net MVC cho một dự án mới và có một câu hỏi về một cái gì đó gây nhầm lẫn cho tôi. Sự khác biệt giữa mô hình và mô hình xem là gì? Tôi có đúng khi nói rằng các mô hình xem bao gồm các mô hình trong các thuộc tính biểu mẫu?sự khác biệt giữa các mô hình và mô hình xem

+0

Bạn có thể đã googled. Bản thân SO có rất nhiều câu hỏi reg. chủ đề này. – VJAI

+1

Câu hỏi SO này- http://stackoverflow.com/questions/4061440/asp-net-mvc-model-vs-viewmodel, hoàn toàn trả lời câu hỏi này. – Bibhu

Trả lời

28

Tôi đã một blog mà tôi muốn hiển thị danh sách các tất cả bài viết, ý kiến ​​mới nhất, loại bài trong một cái nhìn duy nhất. Làm thế nào tôi có thể làm điều đó? Tôi có thể đánh mạnh tầm nhìn của mình vào bất kỳ mô hình nào đúng không? Có kiểu xem.

Tôi đã tạo mô hình chế độ xem được gọi là BlogViewModel chứa các bài đăng mới nhất, nhận xét mới nhất và các nội dung khác làm thuộc tính và tôi ràng buộc chế độ xem của tôi với mô hình này. posts, comments .. là mô hình miền trong khi BlogViewModel là kiểu xem Tôi đã tạo đặc biệt cho chế độ xem.

Ngày mai tôi sẽ hiển thị blog của mình trong phiên bản dành cho thiết bị di động và tại thời điểm đó, tôi có thể tạo mô hình chế độ xem đơn giản chỉ chứa ít thuộc tính hơn. Cuối cùng .. xem các mô hình dành cho lượt xem và hầu hết các lần chúng hoạt động như trình bao bọc trên các mô hình miền thực!

4

ViewModel là phiên bản của Mô hình từ các lớp miền doanh nghiệp được điều chỉnh cho Chế độ xem cụ thể.

Chỉ có Thuộc tính có liên quan đến chế độ xem và không nên có phương pháp (trừ các phương thức đơn giản như ToString()).

ViewModel chỉ là "vùng chứa dữ liệu".

2

Mô hình đơn giản là đại diện cho một đối tượng trong ứng dụng của bạn. Tuy nhiên, có một vài loại mô hình khác nhau mà bạn nên biết.

  1. Mô hình miền: Biểu thị đối tượng miền trong ứng dụng của bạn, như bảng SQL nếu bạn đang sử dụng ORM (Linq2SQL, EF).

  2. Xem mẫu: Đây là một đối tượng mà bạn muốn người dùng cuối xem/chỉnh sửa/v.v. Mô hình chế độ xem có thể chứa các thuộc tính từ một vài hoặc không có mô hình tên miền và thường loại trừ các thuộc tính mà người dùng cuối của bạn không được mút. Xem mô hình chỉ nên chứa các yếu tố cần thiết để hiển thị dữ liệu thích hợp cho người dùng cuối cho một yêu cầu cụ thể.

Here is some Jimmy Bogard cho bạn về Mô hình xem và cách sử dụng chúng.

22

Mô hình thường liên quan chặt chẽ hơn đến cách dữ liệu của bạn được lưu trữ (cơ sở dữ liệu, dịch vụ, v.v.) và mô hình sẽ giống với mô hình đó.

Mặt khác, ViewModel có liên quan chặt chẽ đến cách dữ liệu của bạn được trình bày cho người dùng. Nó thường là một phiên bản phẳng của mô hình của bạn, không chuẩn hóa, vv Nó có thể là tập hợp của nhiều mô hình.

Đối điển hình Person đối tượng của bạn, mô hình của bạn có thể chứa các thuộc tính như sau:

  • FirstName
  • LastName
  • sinh

Tuy nhiên, trong bạn ViewModel bạn có thể chọn để đại diện cho nó khác và có một cái gì đó giống như:

  • FullName
  • Tuổi
+1

Tôi sẽ thêm rằng một đối tượng Mô hình phải đại diện cho cấu trúc ngữ nghĩa/khái niệm của một đối tượng, các thuộc tính và hành vi nội tại/tự nhiên của nó, không quá nhiều cách nó được lưu trữ thực sự. Lưu trữ phải tuân theo các chi tiết thực hiện, không phải là đặc điểm thực tế của đối tượng. – heltonbiker

+1

@heltonbiker, đó là một điểm tuyệt vời. Tôi nghĩ rằng có rất nhiều mô hình, ViewModels, Business Logic Models, mô hình lưu trữ dữ liệu, vv Chúng tôi thường đấu tranh vì chúng tôi không nắm lấy sự khác biệt của mỗi người trong số họ và thay vào đó tập trung vào sự tương đồng của họ. Tôi có thể chỉ viết một bài đăng blog về điều đó sớm thôi;) –

+1

dường như với tôi rằng MODELING bị bỏ quên nhiều nhất trong số các hoạt động phát triển quan trọng nhất (tốt, ít nhất là ở hầu hết các nơi tôi biết ...) – heltonbiker

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