1

最近、ViewModel とその利点について読んでいました。なぜそれが必要なのか理解できますが、質問は、同じオブジェクト (つまり Person クラス) に対して 2 つのクラスがある場合、コードを冗長にしませんか? また、基本クラス モデルとビュー モデルに同じ数のプロパティがあることを確認する必要があるため、将来の変更が少し難しくなることはありませんか? たとえば、 Person というテーブルがあるとしましょう

  1. ID
  2. 名前

NHibernate のマッピングを作成するための hbm を作成しています。次のモデルクラスがあります

public class Person {

 public int ID {get;set;}
 public string Name {get;set;}
 public string color {get;set;} }

私が正しければ、ビューモデルクラスは次のようになります

public class PersonViewModel {

[DisplayName("Full Name")]
public string Name {get;set;}
[DisplayName("Favourite Color")]
public string color {get;set;}
}

まず、データベース内の同じオブジェクトを参照する 2 つのクラスがあります。1 つのクラスは DB 用に使用され、もう 1 つはビュー用に使用されますが、まったく同じメタ データを持つ 2 つのクラスがまだあります。次に、データベースに新しいフィールドを導入する場合、ベース モデル クラス、ビュー モデル クラス、および HBM ファイルの 3 つの場所に追加する必要があります。

間違っている場合は修正してください。これをコードの最適化またはベスト プラクティスと呼ぶにはどうすればよいでしょうか。

4

1 に答える 1

1

採用したいアプローチによって異なります。モデルをビューモデルのプロパティとして直接公開して、DRY 原則に違反しないようにすることができます。ただし、これはデメテルの法則に違反するため、ビューがドメイン モデルとより緊密に結合されるようになるため、バランスを取る必要があります。

また、検証に関しては、モデルを直接公開する場合は、ビューでプロパティを直接使用しない場合でも、公開されたプロパティがエンド ユーザーによって設定される可能性があることに注意する必要があります。また、ビューごとに異なる検証要件が存在する可能性が高くなります。その場合、検証はビュー モデルに関係します。

そのため、一般的なベスト プラクティスは、ドメイン モデルをビューに直接公開しないことです。AutoMapperなどのフレームワークを使用して、レイヤー間のデータ転送配管コードを減らすことができます。

于 2013-05-22T09:54:57.203 に答える