2012-04-17 10 views
0

「オートマッペを使用してモデルをビューモデルにマップする必要があります」というガイドラインがあります。なぜそのような指導?モデルを表示するモデルのマップ

なぜモデルをビューモデルのプロパティにするだけではないのですか?例えば、私はこのようなビューモデルとのコンタクトリストをページ分割できます

class ContactListPaginatedViewModel { 
    public Contact myContact; //the model object 
    public PageInfo pageInfo; 
} 

私は連絡先情報を更新するために、ポストバックを必要としていても - モデルバインダーは、これを簡単に把握します。また、バインドを特定のフィールド/プロパティ(ポストバックなど)で省略する必要がある場合は、単に「包含/除外」でバインドアノテーションを使用することができます。

マニュアルマッピングプロセス(モデルのすべてのプロパティがビューモデルに複製されている)を示唆していない大きな問題がありますか?

私は、モデルがビュー(またはビューモデル)で必要とされない数十のプロパティを持っている可能性がありますが、その場合でも前述のガイダンスはまだ意味をなさないことです。

Insights?

答えて

1

通常、dtoクラスを使用している場合は、モデルに必要なプロパティのみを持つビューモデルを提供することをお勧めします。つまり、実際に使用するプロパティを実際に指定するには、たとえば、フィールドが20のClientオブジェクトがあり、IdFullNameが必要な場合は、モデル全体に​​Clientオブジェクトを含めるのは難しいでしょう。そのモデルで必要なプロパティを指定するほうが簡単です。

また、建築的な観点から見ると、本当にDTOクラスをビューに公開したいのですか?ほとんどの場合、DTOクラスとビュー自体の中間的な通信ポイントとして何らかの種類のサービスレイヤーが使用され、ビューモデルが表示されます。

0

データエンティティをビューに直接送信するのは悪い習慣です。セキュリティ上の理由など、さまざまな理由があります。しかし、ビューモデルの属性(バディのクラスなどの方法があるにもかかわらず、エンティティが自動生成されるときにはできないもの)を適用できるというようなもっと実用的な理由もあります。

一般的に。ビューに固有のビューモデルが必要です。このビュー・モデルはビジネス・オブジェクトにマップする必要があります。ビジネスオブジェクトがエンティティオブジェクトと異なるかどうかは、灰色の領域ですが、ビューモデルとビジネスモデルの間には明確な区別があります。

0

ほとんどの場合、ViewModelsにモデル参照が保持されます。追加のプロパティが必要な場合は、ビューモデルに追加するだけです。それは素晴らしいIMOです。

関連する問題