2011-11-30 14 views
6

私はMVCアプリケーションでViewBagを大量に使用していますが、これは悪い習慣と考えられますか?私はViewModelsの作成に時間を費やすかどうかを確信しています(ただし、MVCよりMVVMに適していると思っていました)。あるいは、ViewBagを頻繁に使用し続けます。これに対する議論は何ですか?お使いのモデルとして人を使用しないのはなぜ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"; 

答えて

9

これらの質問は通常、フェンスの両側から回答を得ます。多くの人々は、このようにViewBagを使用することは悪い設計(自分自身を含む)だと感じています。これにより、コントローラのテストが容易になりません。あなたの意見は厳密にタイプされていません。

通常、ViewModelを使用することをお勧めします。モデルをドメインモデルにする代わりに、表示しているビューに固有のモデルを作成します。そうすれば、この特定のビューに必要なものに合わせて100%カスタムにすることができます。一度これを行うと、ViewBagを使用する必要はありません。それはときには追加のコード(ビューごとに1つのビューモデル)をたくさん作成することがありますが、コードは非常に簡単で、1つのビューを変更するだけで他のものを破ることはありません。

+0

ありがとう、これは私が探していたものです。 – Paul

+0

このような質問は非常に主観的です。あなたのために働くものは他の人のために働かないかもしれませんし、他の人のために働くものはあなたのために働かないかもしれない私は自分の視点から答えるだけです:) – Dismissile

0

:例のコントローラメソッドは、モデル(一般的に、単純なドメインエンティティ)と同様にViewBagに以下の呼び出しの戻りでしょうか?そうすれば、強く型付けされたビューを使うことができます。私の個人的な意見は、ViewBagはかなり「マジックストリング」であり、唯一の開発者である小規模でも機能しますが、大規模なアプリケーションやプロジェクトでは、すべての魔法の文字列が誰であるかを誰もが覚えていなければなりません。また、モデルと厳密に型指定されたビューを使用する型安全性も得られません。

関連する問題