我被告知Asp.Net MVC中的DRY负责人非常重要。我也被告知,坚持这一点的部分不是在可能的情况下在ViewModel中重复实体属性,如[必需]和[显示(名称=“穿梭名称”)]。
我也被告知,数据,业务和表示层之间的分离很重要。所以我想知道为什么像[Display]这样的属性在我的ProjectName.Entity项目中的实体上。我喜欢数据层没有表达层存在的气息的想法。我个人更喜欢在我的数据层中没有显示信息,并且没有数据实体直接映射到我的表示层中的控件。
例如。使用一个简单的ViewModel,它包含需要显示或编辑的任何属性的私有Shuttle实体属性和公共属性:
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的一些反馈。
答案 0 :(得分:6)
我坚信您不应将数据实体与视图模型混合在一起。
查看模型属性可能与您的数据实体不同,例如某些属性在特定视图模型中是必需的,但对于您的数据实体可以是可选的。
您应该使用Automapper等工具按照惯例以编程方式映射属性(或者为奇数属性设置自定义映射器)
我不同意它会违反DRY原则,因为它们都有不同的功能。