Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ViewModel子对象的命名约定_Asp.net Mvc_Naming Conventions_Asp.net Mvc Viewmodel - Fatal编程技术网

Asp.net mvc ViewModel子对象的命名约定

Asp.net mvc ViewModel子对象的命名约定,asp.net-mvc,naming-conventions,asp.net-mvc-viewmodel,Asp.net Mvc,Naming Conventions,Asp.net Mvc Viewmodel,我正在使用ViewModel方法构建一个ASP.NETMVC应用程序,以使我的域实体与UI使用的“模型”分离。我使用以下约定命名ViewModel类。ViewModelName=ViewName+“ViewModel”。例如: Index + ViewModel = IndexViewModel public class PersonViewModel { public int PersonID { get; set; } public Address Address { g

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

Index + ViewModel = IndexViewModel
public class PersonViewModel
{
    public int PersonID { get; set; } 
    public Address Address { get; set; }
    public string SomeOtherProperty { get; set; }
}
到目前为止,很好,这是一种相当常见的模式,关于StackOverflow和其他方面的主题有很多指导。我的问题涉及ViewModels使用的子对象。如果我的ViewModel需要一个属性与我的a域模型对象相同的类,我只需将域模型包含在我的ViewModel中。例如:

Index + ViewModel = IndexViewModel
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


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

我将给出一个答案,因为其他人都没有!(我知道我参加这个聚会有点晚了!)

多年来,我反复思考这个问题,尝试过不同的惯例。我了解到的一件事是,您正在使用命名约定

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

另外,假设您有一个地址表(或任何您拥有的),客户可以有一个地址,公司可以有一个地址,并且他们都使用相同的表,那么您可以对两个父模型使用相同的子模型。使用
AddressViewModel
似乎是正确的。有一天你可能会有一个
视图/PartialView
,它的模型是
IEnumerable


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

我个人的方法不同。我不是根据视图名称命名ViewModels,而是根据它们所表示的模型命名它们。但是,对于您的具体方法,我也会用Address来命名地址。就我个人而言,我不使用后缀,而是为我的视图模型创建一个新文件夹。如果我的域实体位于不同的dll中,那么我将使用models文件夹并在其中创建ui实体。我还使viewmodels负责通过隐式运算符重载将自己转换回域实体,以减轻控制器的负担。@shaftpolls,如果域模型地址和viewmodel地址都在同一文件中使用,这不会导致命名冲突吗。两者都在同一个控制器中。我想我可以用完整的名称空间完全限定每个地址变体,但那将是一个PITA。但是,正如您所建议的,我倾向于在viewmodels中使用与我在域模型中相同的子对象命名约定。我相信您不会有这种问题,因为当您引用viewModel地址时,您将首先引用viewModel本身。e、 g
personViewModel.Address
。如果我的第一条评论有用,如果你同意,我会把它作为答案。@shaftpolls我说的不是属性名,而是类。如果我已经在域模型中使用Address作为类,那么如果我也使用Address来命名作为viewmodel子对象的类,则可能会发生冲突。是的,在大多数情况下,我也得出了这个结论,尽管我给出的示例是Address,这是一个糟糕的例子,因为通常如果我有一个地址对象,我会为我的viewmodel展平它。这实际上意味着我使用的子视图模型的数量比我写这个问题时少。现在,我通常只使用子视图模型来封装视图中与视图的主要内容不同的方面。主模型中的任何其他模型都会被展平。