【问题标题】:How do you name your ViewModel classes?你如何命名你的 ViewModel 类?
【发布时间】:2010-10-30 19:55:31
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller


    【解决方案1】:

    EmployeesViewData。

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

    关于您添加的示例: 恕我直言,类的名称应指定它包含的数据类型。 “....IndexViewData”相当没有意义。该页面上究竟显示了什么?尝试用 1 或 2 个单词对其进行总结,并在其后面添加“ViewData”。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        例子:

        ProductsWithPageInfo
        ProductWithAttributesAndTags
        ClientAndBillingDetail
        UserAccountWithAssociatedGroups
        

        等等

        【讨论】:

        • 如果您的页面包含多个这样的页面,您会怎么做,比如带有 ProductsWithPageInfo 的页面也需要 ProductWithAttributesAndTags ?
        • 嗯,这些类型已经是其他类型的聚合。例如,ProductsWithPageInfo 具有 IList、int PageNumber 和 int PageCount。每个表示“模型”对象都包含渲染特定视图所需的任何内容。有时,如果模型中有很多东西,我会在末尾添加 Etc:ProductAttributesPurchaseHistoryEtc,其中 Etc 表示不需要以名称表示的小细节(如页码和计数)班级。在您的示例中: ProductsWithAttributesAndTagsEtc
        【解决方案4】:

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

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

        例如,我可能会创建一个 CustomerUpdateEnvelope 类,该类仅用于将一个 Customer 对象和一个不相关的 NewsTicker 对象传递给我的 Customer Update 视图。

        【讨论】:

          【解决方案5】:

          我使用以下模式,因为它清晰明确:

          • 型号:Foo
          • 查看:FooView
          • ViewModel : FooViewModel

          【讨论】:

          • 这很干净,但是如果你有不同的 Foo 视图模型呢?例如,您有 3 个端点,一个返回完整的 Foo 模型属性,另一个只返回 ID 和名称,最后一个返回除了模型属性之外的一些自定义数据。命名问题变得更大,尤其是当您有不同类型的 API 时,例如前端 API、内部 API 和公共 API,所有这些都需要返回 FooViewModel。
          【解决方案6】:

          这个特别的帖子有点晚了,但我在一篇博文中写了一些关于ViewModel naming conventions的稍微详细的建议,可能对其他人有用。

          【讨论】:

            猜你喜欢
            • 2010-09-19
            • 1970-01-01
            • 2010-09-12
            • 1970-01-01
            • 2012-12-02
            • 2011-12-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多