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

Cep*_*has 31 asp.net-mvc viewmodel

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

我有一个公司课

public class Company
{
    public string Name { get; set; }
    public int CountryID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

嵌套的ViewModel

public class CompanyCreateEditViewModel
{
    public Company Company { get; set; }
    public IEnumerable<Country> Countries{ get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)

平面ViewModel

public class CompanyCreateEditViewModel
{
    public string Name { get; set; }
    public int CountryID { get; set; }
    public IEnumerable<Country> Countries{ get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)

目前我赞成使用嵌套方法,因为它使我免于第二次定义字段,但我想把它打开以获得更好的方法和评论.

谢谢

Aar*_*ght 24

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

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


Bri*_*ins 5

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

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

恕我直言,HTH.