MVC:DRY vs WET

时间:2013-10-01 04:32:58

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 mapping

我被告知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的一些反馈。

1 个答案:

答案 0 :(得分:6)

我坚信您不应将数据实体与视图模型混合在一起。

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

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

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