7

私は ASP.NET MVC の初心者ですが、これまで多くのモデル ビュー コントローラー フレームワークを使用してきました。

は最近、特定のビューが必要とする (実際には、ViewData に割り当てられている) データの断片を( NameOfView ) ViewModelという新しいクラスにまとめる規則に出くわしました。

ビュー/コントローラーの相互作用によって提供される関数に関連付けられるようにこのデータを収集すると、ヘルパー構造体、またはクロージャー メカニズム (「変数のコレクションをカプセル化する」という意味で) としてさえ思い浮かびます。

ビューでもモデルでもないのに、なぜ「ビューモデル」と呼ばれるのでしょうか?

他の誰かが名前が紛らわしいと思いますか?

編集:コントローラーがプロパティを設定できるようにビューにプロパティを配置するだけで何が問題なのですか?(他のMVCフレームワークのように)

4

5 に答える 5

11

このトピックに関する私の読書では、開発者がViewModelを使用したい、または使用したくない理由について、さまざまな議論に出くわしました。ViewModelは文字列以外のものを公開すべきではないと主張する人さえいます。この時点で、私の考えはそれほど極端ではありません。ただし、ドメイン/コア オブジェクトをビューに公開することはお勧めできません。いくつかの直接の経験の後、この依存関係を削除する方がきれいに感じます。

以下のすべてに同意するわけではありませんが、Daniel Root はViewModelのかなり良い例を示しています。

ほとんどの MVC の例では、LINQ-to-SQL や Entity Framework クラスなどのモデル クラスを直接使用しています。MVC 用の Visual Studio ワイヤリングは、デフォルトの「ビューの追加」コード生成を使用して、この概念にあなたを導きます。これにより、単一のモデル クラスに基づいてビューをすばやく生成できます。ただし、実際のアプリでは、ページを構築するために 1 つのテーブルのデータだけでなく、複数のデータが必要になることがよくあります。 一部の例では、セカンダリ データを ViewData に詰め込むことでこれを回避していますが、これを行うより良い方法は、ビューに必要なすべてのプロパティを含む "ロールアップ" クラスを作成することです。これには、より強く型付けされ、インテリセンスをサポートし、テスト可能であり、ビューが必要とするものを正確に定義するという追加の利点があります。

Jeff Handley は、MVC と組み合わせて使用​​できると彼が主張するViewModelパターンの優れた説明を提供します。

編集
私は最近、ビューモデルに関するジミー・ボガードの考えに沿った考えを持ってきました。各実装でかなりの苦労をした後、ビューごとに 1 つのビュー モデルを使用することで、よりクリーンな開発エクスペリエンスを作成できるようになりました。

于 2010-01-19T18:56:00.140 に答える
10

モデルは、ビューに依存しないデータの表現です。ビューモデルは、データのビュー固有の表現です。これは、特定の視点から見えるモデルです。

生データ ポイントで構成されるモデルを考えてみましょう。ヒストグラム ビューには、そのデータから抽出されたバケットと合計のセットで構成されるビュー モデルが含まれる場合があります。

論理的には、モデルのサブセットまたは変換です。ビュー固有の関数とモデルを唯一の入力としてオンデマンドで生成できます。

ビューのプロパティと、プロパティ バッグまたはカスタム オブジェクトのプロパティについて... 誰かがこれについて強い感情を持っていると確信していますが、個人的には大きな違いはわかりません。モデルのビュー固有の表現を作成し、それを何らかの形で渡しています。正確なメカニズムはそれほど重要ではないようです。

于 2010-01-19T18:33:32.567 に答える
1

Re: コントローラーがビューのプロパティを入力できないのはなぜですか?

コントローラー アクションの実行時にビューが存在しないためです。アクションから ActionResult を返す背後にある考え方は、処理パイプラインの後半で結果を評価し、最善のアクション コースを決定することです (おそらく、ビューをレンダリングするか、リクエストに一致するビューを選択する (モバイル用に作成された特別なビューなど))。デバイス)))。

ここで、適切な種類のモデル オブジェクトの選択に関する投稿を表示しました: Putting the M in MVC Part IPart IIPart III

はい、「ViewModel」という用語は現在流行していますが、それは元の MVC 採用者が念頭に置いていた精神です。

于 2010-01-25T02:39:07.390 に答える
1

これは実際には答えではありませんが、Scott Hanselman による MVC2 Basics ビデオを見ることを強くお勧めします。それはすべてを説明しており、以前に ASP.NET MVC を実行したことがありますが、多くのことが明確になりました。

ここにあります: http://channel9.msdn.com/Blogs/matthijs/ASPNET-MVC-2-Basics-Introduction-by-Scott-Hanselman

于 2010-10-31T21:40:52.040 に答える
0

「ビュー用に作成されたモデル」であるため、そのように呼ばれています。用語の選択が少し混乱する理由は理解できます。

すべてのデータを大きなハッシュ配列としてビューに渡したくない場合、これは便利なアプローチです。UI専用の厳密に型指定されたクラスを提供し、コアモデルもビューも汚染しません。また、UI ロジックをカプセル化することもできます。ビューはダムのままにしておく必要があります。

于 2010-01-19T20:21:01.787 に答える