ViewBag vs ViewModel

ASP.NET MVC 5 プロジェクトを新規作成したら、HomeController が ViewBag を使ってビューにデータを渡している。

一方、『Entity Framework を使用した、ビューがある MVC5 コントローラー』を追加すると、 Entity Framework を使って取得したデータを View メソッドの引数としてビューに渡している。

Rails から ASP.NET MVC に移った当初は、ViewBag と View メソッドに渡すモデルの使い分けに悩んだ。

  • とりあえずデータベースから取得したデータは View メソッドにそのまま渡す
  • ビューで他に必要なデータがある場合は、データベースから取得して ViewBag で渡す

といった感じでごちゃごちゃ使っていたけど、 今では『ビューで必要なデータは極力 ViewModel にすべてセットして View メソッドで渡す』ようになった。

理由としては

  • ViewBag だとビューでインテリセンスが効かない
  • ViewBag だと typo していても Visual Studio がエラーを表示してくれない
  • ビューで必要なデータをすべて保持する ViewModel を Application Service から取得するようにして、コントローラーを薄くしたい

ってところ。 例外として、ビューだけで完結するもの、例えばページタイトルなんかは今でも ViewBag 使っている。

ASP.NET MVC のベストプラクティスをネットで検索したら結構ヒットするけど、 決定版っていうのは見つけられなかったな。 自分の場合、ネットの記事や本を読んだり、ASP.NET MVC で作られた OSS のソースをチラ見したりして、 だんだんと今の形に落ち着いたけど。 ASP.NET MVC 使って開発している人たちは、みんなどうやってるんだろう。