ASP.NET MVC中的平面与嵌套ViewModel类

时间:2010-02-10 02:07:18

标签: asp.net-mvc viewmodel

我正在寻找关于ViewModel定义的两种不同方法的一些意见

我有公司课

public class Company
{
    public string Name { get; set; }
    public int CountryID { get; set; }
}

对于“创建”和“编辑”视图,我需要一个国家/地区列表来填充DropDownList以进行CountryID选择。我可以看到如何构建ViewModel的两个广泛选择,详见下文。

嵌套ViewModel

public class CompanyCreateEditViewModel
{
    public Company Company { get; set; }
    public IEnumerable<Country> Countries{ get; set; }
....
}

平面ViewModel

public class CompanyCreateEditViewModel
{
    public string Name { get; set; }
    public int CountryID { get; set; }
    public IEnumerable<Country> Countries{ get; set; }
....
}

目前我赞成使用嵌套方法,因为它可以让我免于第二次定义字段,但我想把它放在更好的方法和评论上。

由于

2 个答案:

答案 0 :(得分:24)

我个人更喜欢使用嵌套方法进行演示,因为当您使用局部视图时,它会导致更合理的设计。您可能在知道如何呈现CompanyPartialView的整个应用程序中使用了Company,因此将Company公开为嵌套结构非常有意义。

另一方面,对于数据 entry ,最简单的ViewModel类是最容易使用的。你只有一堆表单字段都映射到各个属性。因此,我的策略通常是将它们展平为数据输入页面并将它们嵌套在演示文稿/报告页面中。

答案 1 :(得分:5)

我更喜欢嵌套,原因如下:

  • 这就是面向对象的全部内容。
  • 如果您使用LINQ to SQL或实体或ORM,您只需传递ORM对象,而不必传递所有类型的属性。
  • 您可以传递其他视图,因此可以为部分视图创建单独的模型,如果该视图使用部分视图,则可以将局部视图模型类作为视图模型类的属性传递。

恕我直言,HTH。