命名约定
约 592 字大约 2 分钟
Caliburn.MicroWPFC#.net
2025-06-19
View/ViewModel 命名约定
类型名称的命名约定
正如文档其他部分中简要提到的,View 及其配套 ViewModel 最常见的命名约定可以描述如下:
| ViewModel | View | |
|---|---|---|
| Convention | <EntityName>ViewModel | <EntityName>View |
| Example 1 | ShellViewModel | ShellView |
| Example 2 | TabViewModel | TabView |
因为认识到 View 是一个抽象术语,并且大多数应用程序的主要 View 实际上是某种 Page,所以我们认为框架将 View 视为 Page 的同义词非常重要。因此,该框架内置了对此用例的支持:
| ViewModel | View | |
|---|---|---|
| Convention | <EntityName>PageViewModel | <EntityName>Page |
| Example 1 | MainPageViewModel | MainPage |
| Example 2 | OrderPageViewModel | OrderPage |
该框架支持的标准命名约定的一个限制是没有考虑不同的语言,甚至英语中的不同术语。虽然 View 和 ViewModel 可以被认为是普遍理解的,因为它们都是 Caliburn Micro 致力于的 MVVM 设计模式的重要方面,但像 Page 这样的词却不是。因此,一个强大的框架至少允许通过定制支持额外的后缀(例如 Pagina、Seite、Form、Screen)。
多视图支持的命名约定
正如文档的约定部分所述,该框架旨在处理 ViewModel 和 View 之间的一对多关系。框架支持的标准约定如下:
| ViewModel | View | |
|---|---|---|
| Convention | <EntityName>[<ViewSuffix>]ViewModel | <EntityName>.<Context> |
| Example 1 | TabViewModel | Tab.First |
| Example 2 | CustomerViewModel | Customer.Master |
类型命名空间的命名约定
在.NET 开发中,所有程序集都必须有一个默认命名空间。因此,最基本的用例是将 View 和 ViewModel 组件层一起驻留在同一层中。该约定可以描述如下:
| ViewModel | View | |
|---|---|---|
| Convention | <RootNS>.<ViewModelTypeName> | <RootNS>.<ViewTypeName> |
| Example 1 | MyProject.ShellViewModel | MyProject.ShellView |
| Example 2 | MyProject.MainPageViewModel | MyProject.MainPage |
虽然许多应用程序的所有视图和视图模型可能驻留在单个程序集中,但通常的做法是将视图和视图模型组织在项目内的单独文件夹中。因此,默认情况下,Visual Studio 会将组件放入与这些文件夹相对应的单独命名空间中。由于项目文件夹与操作系统文件夹类似,因此项目子文件夹也可能嵌套多层。此常见用例的命名空间命名约定可以描述如下:
| ViewModel | View | |
|---|---|---|
| Convention | <RootNS>.ViewModels.<ChildNS>.<ViewModelTypeName> | <RootNS>.Views.<ChildNS>.<ViewTypeName> |
| Example 1 | MyProject.ViewModels.ShellViewModel | MyProject.Views.ShellView |
| Example 2 | MyProject.ViewModels.Utilities.SettingsViewModel | MyProject.Views.Utilities.SettingsView |