【发布时间】:2013-10-07 03:09:21
【问题描述】:
有人告诉我,Asp.Net MVC 中的 DRY 原则非常重要。我还被告知,遵守这一点的一部分是尽可能不要在 ViewModel 中重复实体属性属性,例如 [Required] 和 [Display(Name="Shuttle Name")]。
我还被告知,数据、业务和表示层之间的分离很重要。所以我想知道为什么像 [Display] 这样的属性在我的 ProjectName.Entity 项目中的实体上。我喜欢数据层没有表现层存在的想法。我个人更喜欢在我的数据层中没有显示信息,并且没有直接映射到我的表示层中的控件的数据实体。
例如。使用包含私有 Shuttle 实体属性和任何需要显示或编辑的属性的公共属性的简单 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; }
}
我意识到这可能会重复 ViewModel 中已经存在于 Entity 类中的属性并手动映射数据,但根据经验,我发现它每次都有效。当一个复杂的实体被超级映射到一个 ViewModel 时,我还看到了一些非常不直观的异常。所以我希望得到一些关于 DRY 与 WET 的反馈。
【问题讨论】:
-
为什么问题被搁置?我在这里寻求最佳实践!我在问 DRY 是否意味着尽可能将实体绑定到 ViewModel!
标签: c# asp.net-mvc entity-framework asp.net-mvc-4 mapping