在viewmodel和视图中直接提到的实体是可以接受的吗?

时间:2012-04-16 19:26:37

标签: c# asp.net asp.net-mvc-3 entity-framework domain-driven-design

我正在使用ASP.NET MVC 3和Entity Framework开发多层。我有一个名为“Site”的实体属于域层。可以直接在域实体视图模型和视图中提及吗?

视图模型

public IList <Domain.Entities.Site> Sites;

查看

foreach (var item in Model.Sites)
{
...
}

4 个答案:

答案 0 :(得分:4)

通常不是。 ViewModel的要点是仅抽象模型所需的信息。

您应该拥有一个也与Site模型相对应的ViewModel。

所以你会:

// assuming the Domain model is what we're talking about
public class DomainViewModel
{
    public IList<SiteViewModel> Sites { get; set; }
}

答案 1 :(得分:2)

我认为在您的视图中引用域实体是完全可以接受的。如果您不需要为视图转换域实体中的任何信息,那么使用ViewModel将其抽象化是多余的。

正如您可能会发现对此主题有不同的看法,但它真正归结为是否抽象出域名实体是否正在增加任何价值。创建一个ViewModel将增加一些未来的灵活性,也许对你来说,这足以证明它是合理的。如果是这种情况,那么一定要这样做。但是不要因为害怕违反MVC而感到害怕。

答案 2 :(得分:0)

直接绑定到模型是一个短期解决方案。最好让viewmodel包装你的模型,以防你需要绑定到与模型无直接关系的其他属性。即bool CanDelete,bool IsEnabled ......

答案 3 :(得分:0)

一般来说,没有。

如果这是QUICK和BASIC应用程序,那么不情愿确定。

除了你自己在脚下拍摄的一切,普遍接受的模式是使用ViewModels来保存你需要的所有数据(包括SelectList数据等,而不是使用ViewBag。

Btw在ViewBag上,也避免这样做: http://completedevelopment.blogspot.com/2011/12/stop-using-viewbag-in-most-places.html