0

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

モデルをビューモデルのプロパティにしないのはなぜですか? たとえば、次のようなビュー モデルを使用して連絡先リストをページ付けできます。

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

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

手動のマッピング プロセス (モデルのすべてのプロパティがビュー モデルに複製される) が望ましいことを示唆する、私が見逃しているより大きな問題はありますか?

私が把握できる最善の方法は、モデルにはビュー (またはビュー モデル) が必要としない数十のプロパティがある可能性があるということです...しかし、その場合でも、前述のガイダンスはまだ意味がありません。

洞察?

4

3 に答える 3

1

通常、dto クラスがある場合は、モデルに必要なプロパティのみをビュー モデルに提供するのがベスト プラクティスです。これは、実際に使用するプロパティのみを実際に指定することを意味します。たとえばClient、20 個のフィールドを持つオブジェクトがあり、 と が必要だったIdとします。オブジェクト全体をモデルにFullName含めるのはやり過ぎです。単に指定する方がよいでしょう。Clientそのモデルで必要なプロパティ。

また、アーキテクチャの観点から、本当に DTO クラスをビューに公開したいですか? ほとんどの場合、ある種のサービス レイヤーが DTO クラスとビュー自体の間の一時的な通信ポイントとして使用され、それによってビュー モデルが自動的に設定されます。

于 2012-04-17T18:30:23.143 に答える
0

私はほとんどの場合、ViewModel にモデル参照を保持しています。追加のプロパティが必要な場合は、ビューモデルに追加するだけです。大丈夫ですIMO。

于 2012-04-17T21:31:45.257 に答える
0

データエンティティをビューに直接送信するのは悪い習慣だからです。これには、セキュリティ上の理由など、いくつかの理由があります。ただし、ビュー モデル属性を適用できるなど、より実用的な理由もあります (エンティティが自動生成されている場合は実行できませんが、バディ クラスなどを使用する方法があります)。

一般に。ビューに固有のビュー モデルが必要です。このビュー モデルは、ビジネス オブジェクトにマップする必要があります。ビジネス オブジェクトがエンティティ オブジェクトと異なるかどうかはグレー ゾーンですが、ビュー モデルとビジネス モデルの間には明確な違いがあるはずです。

于 2012-04-17T18:42:07.093 に答える