C# 如何命名ViewModel类?

C# 如何命名ViewModel类?,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,什么样的命名约定适合ViewModel类 示例:对于HomeController,索引视图?HomeIndexViewModel似乎不正确。员工视图数据 这就是我使用的,也是我在示例应用程序中看到的 关于您添加的示例:Imho类的名称应该指定它包含的数据类型。“…索引数据”是毫无意义的。那页上到底显示了什么?尝试用1或2个单词对其进行总结,并在其后面添加“ViewData” 或者只需获取控制器的名称并删除“索引”。HomeViewData听起来不错。我更喜欢HomeViewModel,或者使用前

什么样的命名约定适合ViewModel类

示例:对于HomeController,索引视图?HomeIndexViewModel似乎不正确。

员工视图数据

这就是我使用的,也是我在示例应用程序中看到的

关于您添加的示例:Imho类的名称应该指定它包含的数据类型。“…索引数据”是毫无意义的。那页上到底显示了什么?尝试用1或2个单词对其进行总结,并在其后面添加“ViewData”


或者只需获取控制器的名称并删除“索引”。HomeViewData听起来不错。

我更喜欢HomeViewModel,或者使用前面的员工示例,CreateEmployeeViewModel、EditEmployeeViewModel等。其想法是“ViewModel”强调了我们正在处理演示问题的事实,并消除ViewModels与您可能拥有的任何域模型对象之间的歧义。

我试图使我的表示模型名称与它们将显示的表示类型无关。最初我可能会将模型对象用于ASP.NET视图,但稍后我也可能会在WCF或WinForms应用程序中使用它。我试着给我的模型命名,以便它们逻辑地描述它们所包含的内容,而不会用“ViewData”、“ViewModel”、“Model”等来混淆它们

示例:

ProductsWithPageInfo
ProductWithAttributesAndTags
ClientAndBillingDetail
UserAccountWithAssociatedGroups

等等。

我一直在使用术语信封作为我名字的一部分,在我阅读Wrox书的第1章之前不久,我就开始使用它,并发现更普遍接受的术语是ViewModel

然而,当我有两个或更多(通常是不相关的)强类型模型要交给视图时,我创建的这些ViewEnvelopes仅用于非常简单的封装。它们不包含任何其他功能——信封仅在这个意义上作为交付机制,而ViewModel这个术语对我来说,似乎对我如何使用它没有太多描述,也可能对它的真正用途更加模糊


例如,我可以创建一个CustomerUpdateEnvelope类,该类的存在仅仅是为了将一个Customer对象和一个无关的NewsTicker对象传递给我的Customer Update视图

我使用以下模式是因为它清晰明了:

  • 型号:Foo
  • 视图:FooView
  • ViewModel:FooViewModel

对于这个特定的主题来说已经很晚了,但是我在一篇博客文章中写了一些更详细的建议,这可能对其他人有用。

如果你有一个包含多个属性的页面,比如一个包含ProductsWithPageInfo的页面,也需要带有属性和标签的Product,你会怎么做,这些类型已经是其他类型的聚合。例如,ProductsWithPageInfo具有IList、int PageNumber和int PageCount。每个表示“模型”对象都包含渲染特定视图所需的任何内容。有时,如果模型中有很多内容,我会在末尾添加Etc:ProductAttributesPurchaseHistoryTC,其中Etc表示不需要在类名称中表示的小细节(如页码和计数)。在您的示例中:产品属性和标记集是干净的,但是如果您有不同的Foo视图模型呢?例如,您有3个端点,一个返回完整的Foo模型属性,另一个只返回ID和名称,最后一个除了模型属性之外还返回一些自定义数据。命名问题变得更大,尤其是当您有不同类型的API时,比如前端API、内部API和公共API,它们都需要返回FooViewModel。