2009-06-17 33 views
8

Tôi đã đọc cuốn sách chuyên nghiệp ASP.NET MVC 1.0 cũng như đọc các nguồn khác nói về việc sử dụng ViewModel thay vì ViewData từ bên trong bộ điều khiển của bạn sang Chế độ xem. Nhưng sau đó tôi thấy rất nhiều ví dụ về ViewData được sử dụng trong các tình huống khó khăn khi không có cách nào khác ngoài việc lấy thứ gì đó từ ViewData. Nhưng sau đó tôi đọc một cuốn sách như Pro ASP.NET MVC Framework và tất cả các ông nói về chỉ là ViewData, không có gì về ViewModel. Vậy ViewModel là một khái niệm rất mới hay gì?Để sử dụng ViewData hoặc không sử dụng ViewData

Tôi thấy rằng ViewModel là một cách tiếp cận tốt hơn nhiều nhưng nó là một lựa chọn vững chắc? Tôi có nghĩa là ViewData là như vậy có sẵn cho bạn trong khác những thứ như đối tượng HtmlHelper nơi ViewModel không. Hoặc ví dụ sử dụng nó trong một điều khiển tùy chỉnh (http://www.codeproject.com/KB/custom-controls/MVCCustomControls.aspx). Vì vậy, tôi sử dụng một kết hợp của cả hai tùy thuộc vào mục tiêu khác nhau hoặc những gì? Điều gì sẽ xảy ra nếu tôi muốn truy cập ViewModel trong phương thức Tiện ích mở rộng của tôi vì bất kỳ lý do gì? Tôi bị mất ở đây như những gì con đường để có. Tôi biết rằng ViewData không được đánh máy mạnh nhưng bạn có thể đặt chế độ xem của mình để chỉ định loại và do đó làm cho ViewData của bạn được nhập nhưng tôi tự hỏi. Có rất nhiều hỗ trợ cho ViewData nhưng tôi biết ViewModel là một cách trừu tượng và tách biệt hơn nhiều để đi cũng như được gõ. Tôi chỉ không muốn cắt ngắn bản thân mình trong các tình huống mà tôi sẽ cần phải lấy một số dữ liệu như là ViewData mà dễ dàng truy cập từ các đối tượng khác như lớp HtmlHelper.

Suy nghĩ? Tiêu chuẩn? Kinh nghiệm? Tôi tắt một chút hoặc bạn chỉ cần sử dụng một combo và vẫn sử dụng ViewData trong các trường hợp khác hơn là chỉ gửi dữ liệu từ Controller của bạn đến View của bạn hay cái gì?

Và nếu bạn không sử dụng ViewData và thay vào đó sử dụng ViewModel với bộ điều khiển, có vẻ như bạn không sử dụng ViewModel và do đó ViewData không có mục đích vì bạn chưa đặt nó từ bộ điều khiển của bạn để nó không có sử dụng tại thời điểm đó ?? Tôi có nhầm lẫn với bất cứ ai hay cách nào ở đây không? Bối rối địa ngục ra khỏi bản thân tôi là chắc chắn.

Trả lời

2

Vâng, Chế độ xem là phương pháp triển khai khá nhanh chóng. Tuy nhiên, có bạn đang làm rất nhiều chuỗi chữ đi qua mà thường không phải là một điều tốt. Bạn có thể giải quyết điều đó bằng cách sử dụng một số hằng số chuỗi, đó là những gì tôi làm với các biến Session, nhưng tôi nghĩ ở đây một ViewModel là một cách tiếp cận tốt hơn nhiều. Bất cứ khi nào bạn có thể sử dụng ViewData, bạn cũng có thể sử dụng ViewModel. ViewModel không phải chỉ là đối tượng miền của bạn; nó có thể là một lớp trợ giúp không chỉ có một đối tượng miền mà còn một số thuộc tính bổ sung cụ thể cho khung nhìn của bạn; đó là lý do tại sao nó ở đó. Vì vậy, với ViewModel, bạn có trình biên dịch giúp bạn và rõ ràng từ một quan điểm OO, nó sạch hơn nhiều so với việc chỉ chuyển các khóa vào một từ điển.

Tôi nghĩ MVC ở đây cung cấp một cách tiếp cận tốt. Nó cung cấp và nhanh chóng và bẩn (không nhất thiết phải là một điều xấu) cho những người cần "chỉ cần làm cho nó được thực hiện" và một cách tiếp cận sạch hơn, cả hai đều khá dễ sử dụng.

Nếu bạn chưa đọc Hướng dẫn ASP.NET MVC của Scott Gurthie; Tôi khuyên bạn nên nó:

http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx

+0

Tôi không nói về ViewData.Model. Tôi đang nói về một lớp bổ sung nằm giữa View và Controller của bạn "ViewModels" làm công việc để lấy các đối tượng nhất định từ mô hình của bạn để bộ điều khiển có thể sử dụng chúng thay vì các mục điều khiển lấy từ lớp Model của bạn. – PositiveGuy

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