Skip to content

Commit

Permalink
📑 代码规范
Browse files Browse the repository at this point in the history
  • Loading branch information
xinansky committed Oct 25, 2023
1 parent eff9185 commit b279b6c
Showing 1 changed file with 163 additions and 0 deletions.
163 changes: 163 additions & 0 deletions CODINGSTANDARD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# 编码规范

AIO 函数库的「命名规范」以及「代码审查制度」,由于版本或历史遗留问题,某些特例可能并未严格遵守这项规范。

## 术语定义

- **Pascal 大小写**

> 将标识符的首字母和后面连接的每个单词的首字母都大写。
例如:CodingStandard

- **Camel 大小写**

> 将标识符的首字母小写,而后面连接的每个单词的首字母都大写。
例如:codingStandard

## 命名规范

- **文件及文件夹**

> 1.文件/文件夹名遵从Pascal命名法,无特殊情况,扩展名小写。
> 2.C#类使用统一而又通用的文件扩展名: C# 类名 .cs,正常情况下,一个cs文件中不能含有两个及以上的类。
- **代码注释**

> public、protect等可被外界访问权限的类、方法、属性、变量等,都应使用C#的标准XML注释语法,例如:
```csharp
/// <summary>
/// 方法功能简述
/// </summary>
/// <param name="a">第一个参数 a</param>
/// <param name="b">第二个参数 b</param>
/// <returns>返回值简述</returns>
```
> 其他如私有变量、方法等可使用常规//单行注释或/**/多行注释。
- **命名空间**

> 命名空间的命名:Pascal,例如:`System.Drawing`
- **类、结构体**

> 类、结构体的命名:Pascal,例如:`AppDomain`
- **枚举类型**

> 枚举类型的命名:Pascal,例如:`ErrorLevel`
- **枚举值**

> 枚举值的命名:Pascal,例如:`FatalError`
- **接口**

> 接口的命名:I + Pascal,例如:`IDisposable`,(应当总是以 I 前缀开始)。
- **公开的/内部的/静态的属性、字段**

> 公开的/内部的属性、字段的命名:Pascal,例如:`BackColor`
- **受保护的/私有的属性、字段**

> 受保护的/私有的属性、字段的命名:_ + Camel,例如:`_redValue`
- **参数**

> 参数的命名:Camel,例如:`typeName`
- **局部变量**

> 局部变量的命名:Camel,例如:`backColor`
- **常量**

> 常量的命名:全大写,例如:`VALUE`
- **方法**

> 方法的命名:Pascal,例如:`ToString`
- **回调方法**

> 回调方法的命名:On + Pascal,例如:`OnInitialization`,(应当总是以 On 前缀开始)。
## 类成员排序规范

- **按作用域排序(从上至下)**

> 静态(只读、常量)成员 - 实例成员。
- **按类型排序(从上至下)**

> 字段 - 属性 - 方法。
- **按权限排序(从上至下)**

> 公有(内部)成员 - 保护成员 - 私有成员。
## 类成员分段规范

一个分段内的成员之间`不留间隔`,两个分段之间留`一个空白行作为间隔`

- **按作用域分段**

> 静态(只读、常量)成员为一段,实例成员为一段。
- **按类型分段**

> 字段为一段,属性为一段,方法为一段。
- **按权限分段**

> 公有(内部)成员为一段,保护成员为一段,私有成员为一段。
- **按业务分段**

> 不同业务功能为一段。
## 代码审查制度

参考该文档:[Code Review Checklist and Guidelines for C# Developers](https://www.codeproject.com/Reference/593751/Code-Review-Checklist-and-Guidelines-for-Csharp-De)

- **编译完成后,确保控制台没有任何警告。**

- **去掉所有没有用到的 usings,编码过程中去掉多余代码是个好习惯。**

- **在合理的地方检查对象是否为 null,避免运行的时候出现 Null Reference Exception。**

- **始终遵循命名规范。**

- **如果可以,尽量减小方法体的大小,减少代码的分支,保持成员名的简短。**

- **代码可重用性:如果一块代码已经被使用超过一次,或者你希望将来使用它,请提取成一个方法,将重复的工作做成通用的方法放在相关的类中,这样一旦你完成别人就可以使用了。**

- **代码一致性:比方说,Int32 写成 int,String 写成 string,应该在代码里保持统一形式,不能一会儿写成 int 一会儿写成 Int32。**

- **代码可读性:代码应该是可维护的,便于其他开发者理解。**

- **及时释放非托管资源,比如文件I/O,网络资源等,一旦使用结束就应该释放它们,如果你想一旦超出使用范围就自动释放对象,可以使用 using 将非托管代码括起来。**

- **合理实现异常处理(try/catch 和 finally 块)和异常记录。**

- **如果代码只会使用一次,请使用匿名类型。**

- **使用访问限定符(private, public, protected, internal, protected internal)限定每个方法、类或变量的访问范围,比方说如果一个类只会在程序集内使用,那么定义成 internal 就足够了。**

- **在需要保持解耦的地方使用接口,有些设计模式的出现也是由于接口的使用。**

- **按照用法和需要将类定义为 sealed、static 或 abstract。**

- **如果需要多次(大于3次)串联,请使用 Stringbuilder 代替 string,这可以节省堆内存。**

- **检查是否有不可能执行的代码,如果有,请修改。**

- **在每个方法前注释,说明它的用法、输入类型和返回值类型信息。**

- **尽量减少强制转换和类型转换的次数,因为会造成性能损失。**

- **确认代码是否有内存泄漏,如果有,请确保已修正。**

- **要透彻理解 OOP 概念,并尽可能在自己的代码里实现。**

- **了解整个项目的设计架构,可以从整体上理解程序的执行流程。**

0 comments on commit b279b6c

Please sign in to comment.