2

mvc プロジェクトで、モデルとビュー モデルの違いを説明してもらえますか?

私の理解では、ビューモデルはビューのデータを表します。cshml ですが、モデルは部分ビューのデータを表します。これは正しいでしょうか。さまざまな状況で名前が使用されているのを見たことがありますが、これについての方向性を探すのに混乱しています。

4

4 に答える 4

5

モデルはあなたのドメインです。たとえば、顧客モデルがあるとします。この顧客をドメインで使用できます。このお客様の注文が可能です。お客様の連絡先の詳細などを更新できます。

// Domain object, encapsulates state.
class Customer 
{   
   public void PlaceOrder() {...}
   public void UpdateContactDetails() { ... }
}

ビュー モデルは、データを簡単に表示する方法です。たとえば、顧客ビュー モデルがあるとします。これは、顧客をビューに公開できる単純な DTO (データ転送オブジェクト) になります。多くの場合、ビュー モデルはモデルから作成され、何らかの形式の変換が行われることがよくあります。

// DTO - exposes state - no domain logic
class CustomerViewModel
{
    public string Name { get; set; }
    public int Id { get; set; }
}

ビューでドメイン オブジェクトを使用するのではなくビュー モデルを使用する利点は、プレゼンテーション ロジックを容易にするためにドメインの内部を公開する必要がないことです。ビュー モデルはモデル バインディングを制御する方法であることを付け加えておきます。たとえば、データベース レコードを公開する場合、おそらくレコード全体をバインド可能にしたくないでしょう。ビュー モデルを使用すると、モデル上のこれらのパラメーターのみがバインドされます。したがって、ビュー モデルを使用することは、セキュリティの観点から重要です。ここでの代替手段は、ホワイトリストを使用して、モデル バインディング プロセス中に使用されるものを制御することです。当然、これは面倒でエラーが発生しやすくなります。

ASP.NET MVC に関して言えば、モデルという言葉はある程度同じ意味で使用されます。「現実世界」のプロジェクトでは、ドメインは複雑で、Web アプリ内に存在しない可能性が高く、他の依存関係を含める可能性があります。したがって、使用する「モデル」はビュー モデルになります。

于 2012-09-23T20:17:19.960 に答える
3

一般に、ASP.NET の世界では、人々がモデルを参照して「ドメイン モデル」を参照する場合、データベース テーブルと C# クラスの間の 1 対 1 のマッピングであることがよくあります。

ビュー モデルを参照する場合、これらはビュー (.cshtml) とコントローラーの間のデータの受け渡しを支援する便利なクラスです。ビュー モデルには、ドメイン モデルの集計データ (たとえば、'FirstName' と 'LastName' の組み合わせである 'FullName' と呼ばれるプロパティ) またはページング情報などを含むビューに関連するデータが含まれている必要があります。

個人的には、ビュー モデルを使用してデータを単純な形式でビューに表示することを好みます。また、コントローラー アクションがビュー モデルのインスタンスを取得し、ドメイン モデルを構築して、直接またはサービス レイヤーを介してそれらに作用するようにします。

于 2012-09-23T20:43:36.903 に答える
0

ビューモデルは特定のビュー/画面/部分ビューのデータを保持するのが一般的であり、モデルはむしろビジネスオブジェクトまたはエンティティを表すオブジェクトであると言えます。

于 2012-09-23T20:17:26.120 に答える
0

次の投稿を調べてください。あなたの質問はうまく答えられました: ASP.NET MVC モデルと ViewModelの比較

お役に立てれば

于 2012-09-23T20:34:09.587 に答える