7

我正在使用 ViewModel 方法构建一个 ASP.Net MVC 应用程序,以使我的域实体与我的 UI 使用的“模型”分开。我使用以下约定来命名我的 ViewModel 类。ViewModelName = ViewName + "ViewModel"。例如:

Index + ViewModel = IndexViewModel

到目前为止,一切都很好,这是一个相当普遍的模式,在 StackOverflow 和其他地方有很多关于这个主题的指导。我的问题涉及我的 ViewModels 使用的子对象。如果我的 ViewModel 需要一个属性与我的域模型对象相同的类,我只需将域模型包含在我的 ViewModel 中。例如:

public class PersonViewModel
{
    public int PersonID { get; set; } 
    public Address Address { get; set; }
    public string SomeOtherProperty { get; set; }
}

但是,当我需要一个与我的域模型具有不同属性的子对象时,我不确定使用什么命名约定。例如,如果除了 Address 域模型中的内容之外,Address 还需要一些其他属性,我应该怎么称呼它?我认为 AddressViewModel 像这样:

public class PersonViewModel
{
    public int PersonID { get; set; } 
    public AddressViewModel Address { get; set; }
    public string SomeOtherProperty { get; set; }
}

但这对我来说感觉不对。我的直觉是 ViewModel 后缀应该只用于顶级 ViewModel。

我正在寻找其他开发人员关于他们在这种情况下使用哪些命名约定的建议,特别是在这种情况下您会如何称呼子对象?

4

1 回答 1

1

我要回答这个只是因为没有其他人有!(我知道我参加这个聚会有点晚了!)

多年来,我已经多次考虑过这个确切的事情,并尝试了不同的约定。我发现的一件事是您正在使用命名约定......

如果您的命名约定是使用“ViewModel”为您的 UI 模型类添加后缀,那么子模型应该具有相同的后缀,否则您将违反自己的约定!

还可以说您有一个地址表(或您拥有的任何东西),客户可以有一个地址,公司有一个地址,并且它们都使用同一个表,那么您可以对两个父模型使用相同的子模型。拥有一个AddressViewModel. 有一天你可能有一个View/PartialView,它的模型是IEnumerable<AddressViewModel>

我知道对此没有真正正确的答案,但这是我的答案:-)

于 2014-06-05T14:31:53.557 回答