【发布时间】:2010-10-30 19:55:31
【问题描述】:
什么样的命名约定适合 ViewModel 类?
示例:对于 HomeController,索引视图? HomeIndexViewModel 似乎不对。
【问题讨论】:
标签: c# asp.net-mvc model-view-controller
什么样的命名约定适合 ViewModel 类?
示例:对于 HomeController,索引视图? HomeIndexViewModel 似乎不对。
【问题讨论】:
标签: c# asp.net-mvc model-view-controller
EmployeesViewData。
这就是我使用的,也是我在示例应用程序中看到的。
关于您添加的示例: 恕我直言,类的名称应指定它包含的数据类型。 “....IndexViewData”相当没有意义。该页面上究竟显示了什么?尝试用 1 或 2 个单词对其进行总结,并在其后面添加“ViewData”。
或者只取控制器的名称并删除“索引”。 HomeViewData 听起来不错。
【讨论】:
我更喜欢 HomeViewModel,或者使用前面的员工示例,CreateEmployeeViewModel、EditEmployeeViewModel 等。这个想法是“ViewModel”强调我们正在处理表示问题的事实,并消除了 ViewModel 与任何域模型对象的歧义你可能有。
【讨论】:
我尽量让我的演示模型名称与它们将使用的演示类型无关。我最初可能将我的模型对象用于 ASP.NET 视图,但稍后我也可能在 WCF 或 WinForms 应用程序中使用它。我尝试为我的模型命名,以便它们能在逻辑上描述它们所包含的内容,而不会将它们与“ViewData”、“ViewModel”、“Model”等混淆。
例子:
ProductsWithPageInfo
ProductWithAttributesAndTags
ClientAndBillingDetail
UserAccountWithAssociatedGroups
等等
【讨论】:
我一直使用信封这个术语作为我名字的一部分,我在阅读 Wrox 书的第 1 章并发现更普遍接受的术语是 ViewModel 之前不久就开始使用它。
但是,我创建的这些 ViewEnvelope 仅用于非常简单的封装,当我有两个或多个(通常不相关的)强类型模型要交给我的 View 时。它们确实不包含任何其他功能——信封仅作为这种意义上的交付机制,而对我来说,术语 ViewModel 似乎不太能描述我如何使用它,而且对于它的真正目的可能更加模棱两可。
例如,我可能会创建一个 CustomerUpdateEnvelope 类,该类仅用于将一个 Customer 对象和一个不相关的 NewsTicker 对象传递给我的 Customer Update 视图。
【讨论】:
我使用以下模式,因为它清晰明确:
【讨论】:
这个特别的帖子有点晚了,但我在一篇博文中写了一些关于ViewModel naming conventions的稍微详细的建议,可能对其他人有用。
【讨论】: