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 から取得するようにして、コントローラーを薄くしたい
- 最近 DDD の階層化アーキテクチャをやりはじめたので
ってところ。 例外として、ビューだけで完結するもの、例えばページタイトルなんかは今でも ViewBag 使っている。
ASP.NET MVC のベストプラクティスをネットで検索したら結構ヒットするけど、 決定版っていうのは見つけられなかったな。 自分の場合、ネットの記事や本を読んだり、ASP.NET MVC で作られた OSS のソースをチラ見したりして、 だんだんと今の形に落ち着いたけど。 ASP.NET MVC 使って開発している人たちは、みんなどうやってるんだろう。