2011-11-30 47 views
6

Tôi sử dụng quá nhiều ViewBag trong ứng dụng MVC của mình, đây có phải là hành vi xấu không? Tôi không chắc liệu có nên dành thời gian tạo ViewModels hay không (tuy nhiên tôi nghĩ điều đó phù hợp hơn với MVVM chứ không phải MVC) hoặc tiếp tục sử dụng ViewBag nhiều. Các đối số cho và chống lại điều này là gì? Ví dụ về phương thức điều khiển sẽ trả về mô hình của nó (thường là một thực thể miền đơn giản) cũng như các cuộc gọi sau đây tới ViewBag:Sử dụng quá nhiều ViewBag

  ViewBag.TotalItems = data.Count(); 
     ViewBag.FilteredItems = gridFilters; 
     ViewBag.Action = "Events"; 
     ViewBag.Area = "People"; 
     ViewBag.EntityID = person.EntityID; 
     ViewBag.OrganisationID = ID; 
     ViewBag.Name = string.Format("{0} {1}", person.FirstName, person.LastName); 
     ViewBag.IsEnabled = person.IsEnabled; 
     ViewBag.EntityID = person.EntityID; 
     ViewBag.Favourited = users.IsOnUserFavourites(person.EntityID); 

     ViewBag.Columns = userColumns; 

     ViewBag.Title = "Person : " + string.Format("{0} {1}", person.FirstName, person.LastName) + " - Events"; 

Trả lời

9

Các câu hỏi như thế này thường sẽ nhận được câu trả lời từ cả hai phía của hàng rào. Nhiều người cảm thấy rằng việc sử dụng ViewBag như thế này là một thiết kế tồi tệ (bao gồm cả bản thân mình). Nó làm cho bộ điều khiển của bạn ít kiểm tra hơn. Số lượt xem của bạn không được nhập mạnh, v.v.

Thực tiễn tốt là sử dụng ViewModel. Thay vì để mô hình của bạn trở thành mô hình miền, hãy tạo mô hình cụ thể cho chế độ xem bạn đang hiển thị. Bằng cách đó, nó có thể được tùy chỉnh 100% phù hợp với những gì bạn cần cho chế độ xem cụ thể này. Bạn sẽ thấy rằng bạn không thực sự cần phải sử dụng ViewBag nhiều khi bạn làm điều này. Đôi khi nó có thể tạo ra nhiều mã bổ sung (một mô hình xem cho mỗi lượt xem) nhưng mã là khá đơn giản và thực hiện thay đổi cho một chế độ xem sẽ không làm hỏng bất kỳ chế độ xem nào khác.

+0

Cảm ơn, đây là những gì tôi đang tìm kiếm. – Paul

+0

Một lần nữa, hãy nhớ rằng những câu hỏi như thế này rất chủ quan. Điều gì làm việc cho bạn có thể không hiệu quả với người khác và những gì hiệu quả với người khác có thể không hiệu quả với bạn. Tôi chỉ trả lời từ quan điểm của riêng tôi :) – Dismissile

0

Tại sao không sử dụng Person làm mô hình của bạn? Bằng cách đó, bạn có thể sử dụng chế độ xem được nhập mạnh mẽ. Ý kiến ​​cá nhân của tôi là ViewBag có khá nhiều 'chuỗi ma thuật' và trong khi nó hoạt động tốt ở quy mô nhỏ, nơi bạn là dev duy nhất, trong các ứng dụng và dự án lớn hơn, bạn buộc phải nhớ tất cả các chuỗi ma thuật. Ngoài ra, bạn không nhận được loại an toàn mà bạn sẽ sử dụng một mô hình và một cái nhìn mạnh mẽ đánh máy.

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