MVC:DRY vs WET

Jam*_*mie 0 c# mapping asp.net-mvc entity-framework asp.net-mvc-4

我被告知Asp.Net MVC中的DRY负责人非常重要.我也被告知,坚持这一点的部分不是在可能的情况下在ViewModel中重复实体属性属性,例如[Required]和[Display(Name ="Shuttle Name")].

我也被告知数据,业务和表示层之间的分离很重要.所以我想知道为什么像[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; } 
}        
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是ViewModel中已经存在于Entity类中的重复属性并手动映射数据但是根据经验我发现它每次都有效.我还看到当复杂实体被超级映射到ViewModel时抛出的一些可怕的非直观异常.所以我会喜欢关于DRY和WET的一些反馈.

Jun*_*Lee 6

我坚信你不应该将你的数据实体与你的视图模型混合在一起.

视图模型属性可能与您的数据实体不同,例如某些属性在特定视图模型中是必需的,但对于您的数据实体可以是可选的.

您应该使用Automapper等工具按照约定以编程方式映射属性(或者为奇数属性设置自定义映射器)

我不同意它会违反DRY原则,因为它们都有不同的功能.