ViewModel中的属性与整个实体

时间:2011-12-16 23:25:27

标签: asp.net-mvc-3

在Create ActionMethod上,目标是将一个或两个Record或两个表添加到一个或多个表中,这是获得ViewModel的最佳方式,为什么?

第一种方法是将整个实体放在ViewModel中,如下所示:

namespace QuotesWeb.ViewModels
{
    public class CreateQuoteVM
    {
        public Quote quote { get; set; }
        public Author author { get; set; }
    }
}

另一种方法是拥有实体的各个属性,如下所示:

namespace QuotesWeb.ViewModels
{
    public class CreateQuoteVM
    {
        public string quoteBody;
        public string quoteTags;
        public string AuthorFirstName;
        public string AuthorLastName;
        // and so on
    }
}

我非常感谢澄清哪个更好,为什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

属性。

实际上,我会说你不应该在viewmodels中有任何实体。您应该具有与您的实体对应的视图模型,但是应该是完全不同的对象层。

为什么呢?因为数据库中实体的状态可能并不总是与您要在网页上显示用户的属性匹配。实体可能具有您不希望向用户或Web /表示层公开的特殊属性。

看看automapper。它非常适合将实体的属性转换为viewmodel图层上的属性,而无需手动DTO所有内容。

<强>更新

使用属性的另一个好理由是它使HTML呈现更简单。通过具有标量属性,您可以执行@ Html.EditorFor(m =&gt; m.PropName)而不是@ Html.EditorFor(m =&gt; m.EntityType.PropName)。 IMO您的观点应关注呈现给用户的各个字段,而不是实体在域中的结构方式。