From 5ab4b5e34f7efb15bd53631984b68a9ce2f9bfbc Mon Sep 17 00:00:00 2001 From: handefeng <1030428966@qq.com> Date: Mon, 9 Dec 2024 11:41:13 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E5=BC=80=E5=8F=91=E8=A7=84?= =?UTF-8?q?=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{开发规约.md => 开发规范.md} | 158 +++++++++++++----- 1 file changed, 120 insertions(+), 38 deletions(-) rename Resource/Document/{开发规约.md => 开发规范.md} (60%) diff --git a/Resource/Document/开发规约.md b/Resource/Document/开发规范.md similarity index 60% rename from Resource/Document/开发规约.md rename to Resource/Document/开发规范.md index 534066a..671318d 100644 --- a/Resource/Document/开发规约.md +++ b/Resource/Document/开发规范.md @@ -1,4 +1,4 @@ -# 开发规约 +# 开发规范 ## 一、总体架构与设计原则 ### (一)MVVM 架构概述 在软件开发中,为实现良好代码结构、可维护性与可扩展性,应分离视图逻辑与业务逻辑,MVVM 设计模式是有效的解决方案。 @@ -9,21 +9,22 @@ Model(模型层):处理数据和业务逻辑,包括数据获取、存储 ## 二、具体实现细节 ### (一)ViewModel -### 1. 命令定义与实现 -#### (1)命名规范 +#### 1. 命令定义与实现 +##### (1)命名规范 ViewModel 中的命令应采用 “动词 + 名词 + Command” 格式命名,清晰表明功能。对应的执行方法命名与命令中的动词一致,便于理解命令与执行逻辑的关联。 -#### (2)代码位置 +##### (2)代码位置 与视图交互的命令在对应的 ViewModel 类中定义和实现,ViewModel 类放在 “ViewModels” 文件夹下。大型项目中,按功能模块细分该文件夹,如 3D 模型相关的 ViewModel 放在 “ViewModels/3DModelViewModels” 文件夹。 -#### (3)实现方式 +##### (3)实现方式 使用合适的命令类实现:建议用实现 ICommand 接口的命令类,如自定义的 “RelayCommand”。它要处理执行逻辑和可执行状态判断,依据条件(如数据准备情况、用户权限)决定命令是否可执行。 命令初始化与方法绑定:在 ViewModel 构造函数中初始化命令并与执行方法绑定,如 “LoadModelCommand = new RelayCommand (LoadModel);”,确保命令触发时调用正确执行方法。 参数处理:命令执行需传递参数时,命令类要能正确处理参数传递和接收。修改命令类构造函数或执行方法以接受参数,在视图层绑定命令时设置参数值。 -### 2. 数据绑定属性 -#### (1)命名规范 + +#### 2. 数据绑定属性 +##### (1)命名规范 数据绑定属性名称用驼峰命名法,清晰反映绑定的数据内容,如 “DisplayName” 绑定文本框显示文本,“DataList” 绑定列表数据。 -#### (2)数据类型选择 +##### (2)数据类型选择 根据绑定控件需求和数据性质选择合适数据类型。简单文本显示控件用 “string” 类型;列表控件用 “ObservableCollection” 等集合类型,实现数据更新自动刷新。 -#### (3)通知机制 +##### (3)通知机制 数据绑定属性值变化时,用合适机制通知视图更新。在支持数据绑定的框架(如 WPF)中,可利用相关接口(如 WPF 的 “INotifyPropertyChanged” 接口)。示例如下: ```csharp private string _displayName; @@ -38,20 +39,21 @@ public string DisplayName } ``` 属性 “set” 方法调用时,通过 “OnPropertyChanged” 方法通知视图层属性值变化,促使控件更新显示内容。 -### 3. 事件处理与通知 -#### (1)事件命名 +#### 3. 事件处理与通知 +##### (1)事件命名 ViewModel 中通知视图的事件命名采用 “名词 + 过去分词” 形式,表明动作完成或状态改变,如 “ModelLoaded” 表示模型加载完成,便于理解事件含义和业务逻辑状态。 -#### (2)事件参数类型 +##### (2)事件参数类型 事件参数类型准确反映事件携带的信息。如 “ModelLoaded” 事件传递加载后的模型对象,参数类型为 “Model3D”。若事件需传递多个信息,创建自定义事件参数类封装信息。 -#### (3)事件触发 +##### (3)事件触发 业务逻辑完成后(如模型加载成功、数据保存完成),在合适位置触发事件,用标准事件触发机制,如 “ModelLoaded?.Invoke (model);”。触发前确保事件初始化和订阅正确,避免空引用等问题。 -## (二)View -### 1. XAML 结构与布局 -#### (1)命名空间引用 +### (二)View +#### 1. XAML 结构与布局 +##### (1)命名空间引用 XAML 文件开头只引入实际使用的命名空间,按字母顺序排序,减少复杂性、提高编译速度,如: .xaml + ```csharp ``` -#### (2)布局设计原则 +##### (2)布局设计原则 选择合适的布局容器:优先用合适布局容器实现灵活可维护布局。简单水平或垂直排列控件用 “StackPanel”,通过 “Orientation” 属性控制排列方向。需精确行列布局用 “Grid”,通过定义行和列定位控件。 避免绝对坐标定位:尽量不用绝对坐标定位控件,以免界面在不同分辨率和窗口大小下适应性差。使用布局容器可实现自适应,保证良好显示效果。 -#### (3)控件命名 + +##### (3)控件命名 为重要控件命名,采用驼峰命名法且以控件类型开头,如 “btnLoadModel”(加载模型按钮)、“txtInputFileName”(输入文件名文本框),提高代码可读性。复杂界面可分组控件并命名,方便在代码 - behind 中访问和操作,如 “LoginControls” 包含登录相关控件。 -### 2. 数据绑定与命令绑定 -#### (1)绑定表达式规范 +#### 2. 数据绑定与命令绑定 +##### (1)绑定表达式规范 数据绑定表达式:数据绑定用 “{Binding Path=PropertyName}” 格式,“Path” 可省略(绑定当前数据上下文直接属性时)。绑定深层属性需指定 “Path” 值,如: .xaml + ```csharp ``` 命令绑定表达式:命令绑定用 “{Binding CommandName}” 格式,确保命令在 ViewModel 数据上下文中存在,如: .xaml + ```csharp