Asp.Net MVC の DRY のプリンシパルは非常に重要だと言われました。また、これを順守することの一部は、可能であれば ViewModel で [Required] や [Display(Name="Shuttle Name")] などのエンティティ プロパティ属性を繰り返さないことだとも言われました。
また、データ、ビジネス、およびプレゼンテーションのレイヤーを分離することが重要であるとも言われました。[Display] などの属性が ProjectName.Entity プロジェクトのエンティティにある理由を知りたいです。プレゼンテーション層の存在を感じさせないデータ層のアイデアが気に入っています。個人的には、データ レイヤーに表示情報がなく、プレゼンテーション レイヤーのコントロールに直接マップされたデータ エンティティがないことを好みます。
例えば。プライベート シャトル エンティティ プロパティと、表示または編集が必要なプロパティのパブリック プロパティを含む単純な ViewModel を使用します。
private readonly Shuttle shuttle;
public ShuttleViewModel() { this.shuttle = new Shuttle(); }
public ShuttleViewModel(Shuttle shuttle)
{
this.shuttle = shuttle;
}
[Required]
[Display(Name = "Shuttle Name")]
public string ShuttleName
{
get { return this.shuttle.Name; }
set { shuttle.Name = value; }
}
これは、既に Entity クラスにある ViewModel の属性を繰り返し、データを手動でマッピングしている可能性があることを認識していますが、経験から、毎回動作することがわかりました。また、複雑なエンティティが ViewModel に uber-mapped されたときに、恐ろしく非直感的な例外がスローされることも確認しました。ですから、DRY と WET についてのフィードバックをお待ちしています。