5050
5151| 类型 | 行动 |
5252| ------| ------|
53- | ** 缺陷修复** | 资源泄漏、空引用风险、并发问题、逻辑错误 → 直接修复 |
54- | ** 性能优化** | 无用分配、重复计算、可池化资源 → 评估后优化 |
53+ | ** 架构梳理** | 梳理代码架构并进行重构,让代码结构更清晰易懂 |
54+ | ** 语法现代化** | 使用最新的 C# 语法来简化代码,提升可读性 |
55+ | ** 缺陷修复** | 资源泄漏、空引用风险、并发问题、逻辑错误 → 直接修复,让代码更健壮 |
56+ | ** 性能优化** | 无用分配、重复计算、可池化资源 → 通过缓存减少耗时的重复计算 |
5557| ** 代码简化** | 重复代码提取、冗余判断合并、现代语法替换 → 在不影响可读性前提下简化 |
56- | ** 注释完善** | 缺失的参数注释、过时的描述 → 补充或修正 |
58+ | ** 注释完善** | 补充类、接口、属性、方法头部的注释,以及方法内部重要代码的注释 |
59+ | ** 架构参考** | 参考网络上同类功能的优秀架构,给出架构调整建议 |
60+
61+ ** 架构调整策略** :
62+ - ** 改动较小** :直接调整,完成后说明变更内容
63+ - ** 改动较大** :先列出调整方案,询问用户意见,待确认后再修改
5764
5865** 不应过度保守** :
5966- ❌ 仅添加注释而忽略明显的代码问题
6673- 性能关键路径 → 需有依据或说明推理
6774- 大范围重构 → 需先与用户确认范围
6875
76+ ### 3.2 防御性注释规则
77+
78+ 在旧有代码中,经常可以看到** 被注释掉的代码** ,这些注释代码前面通常带有说明文字。
79+
80+ ** 这些是防御性注释** :
81+ - 记录了过去曾经踩过的坑
82+ - 目的是告诉后来人不要按照注释代码去写,否则会有问题
83+ - ** 禁止删除此类防御性注释** ,用于警示后人
84+
85+ ** 识别特征** :
86+ ``` csharp
87+ // 曾经尝试过 xxx 方案,但会导致 yyy 问题
88+ // var result = DoSomethingWrong();
89+
90+ // 不要使用 xxx,否则会造成 yyy
91+ // await client.SendAsync(data);
92+
93+ // 这里不能用 xxx,因为 yyy
94+ // stream.Flush();
95+ ```
96+
97+ ** 处理原则** :
98+ - ✅ 保留这类带说明的注释代码
99+ - ✅ 可以补充更详细的说明,解释为什么不能这样做
100+ - ❌ 不要删除这类防御性注释
101+ - ❌ 不要尝试"恢复"这些被注释的代码
102+
69103---
70104
71105## 4. 编码规范
@@ -151,7 +185,7 @@ public class MyService : DisposeBase
151185 public void Start () { }
152186 #endregion
153187
154- #region 辅助
188+ #region 日志
155189 /// <summary >日志</summary >
156190 public ILog Log { get ; set ; } = Logger .Null ;
157191
@@ -163,7 +197,13 @@ public class MyService : DisposeBase
163197}
164198```
165199
166- ** Region 顺序** :` 属性 ` → ` 静态 ` (如有)→ ` 构造 ` → ` 方法 ` → ` 辅助 ` /` 日志 `
200+ ** Region 顺序** :` 属性 ` → ` 静态 ` (如有)→ ` 构造 ` → ` 方法 ` → ` 辅助 ` (如有)→ ` 日志 `
201+
202+ ** 日志 Region 规则** :
203+ - 类代码中如果带有 ` ILog Log { get; set; } ` 和 ` WriteLog ` 方法
204+ - ** 必须放在类代码的最后**
205+ - ** 必须用名为"日志"的 region 包裹**
206+ - 不要放在"辅助" region 中,应单独作为"日志" region
167207
168208### 4.5 现代 C# 语法
169209
@@ -395,7 +435,7 @@ var flag = str.ToBoolean();
395435## 8. 日志与追踪
396436
397437``` csharp
398- #region 辅助
438+ #region 日志
399439/// <summary >日志</summary >
400440public ILog Log { get ; set ; } = Logger .Null ;
401441
@@ -492,6 +532,7 @@ catch (Exception ex)
492532- 伪造测试结果/性能数据
493533- 擅自删除公共/受保护成员
494534- 擅自删除已有代码注释(除非注释本身错误)
535+ - ** 删除防御性注释** (带说明的注释代码,记录历史踩坑经验)
495536- 仅删除空白行制造"格式优化"提交
496537- 删除循环体的花括号
497538- 将 ` <summary> ` 拆成多行
@@ -535,6 +576,46 @@ catch (Exception ex)
535576| ** 热点路径** | 经性能分析或高频调用栈确认的关键执行段 |
536577| ** 基线** | 变更前的功能/性能参考数据 |
537578| ** 顺带修复** | 在完成主任务过程中,修复发现的相关问题 |
579+ | ** 防御性注释** | 被注释掉的代码,前面带有说明,记录历史踩坑经验,用于警示后人 |
580+
581+ ---
582+
583+ ## 15. 代码优化检查清单
584+
585+ 当进行代码优化时,按以下清单逐项检查:
586+
587+ ### 架构与结构
588+ - [ ] 代码架构是否清晰?是否需要重构?
589+ - [ ] 类的职责是否单一?是否需要拆分?
590+ - [ ] 是否有重复代码可以提取为公共方法?
591+ - [ ] Region 组织是否符合规范(属性→静态→构造→方法→辅助→日志)?
592+
593+ ### 语法现代化
594+ - [ ] 是否可以使用更简洁的 C# 语法?(switch 表达式、模式匹配等)
595+ - [ ] 集合初始化是否使用了集合表达式 ` [] ` ?
596+ - [ ] 是否可以使用 null 条件运算符 ` ?. ` 简化代码?
597+
598+ ### 健壮性
599+ - [ ] 是否存在空引用风险?
600+ - [ ] 资源是否正确释放?(IDisposable、流、连接等)
601+ - [ ] 异常处理是否完善?
602+ - [ ] 并发场景是否线程安全?
603+
604+ ### 性能
605+ - [ ] 是否存在可以缓存的重复计算?
606+ - [ ] 是否有不必要的对象分配?
607+ - [ ] 热点路径是否避免了反射和复杂 Linq?
608+ - [ ] 是否使用了对象池/ArrayPool 等池化技术?
609+
610+ ### 注释与文档
611+ - [ ] 类、接口是否有 ` <summary> ` 注释?
612+ - [ ] 公共方法是否有完整的参数和返回值注释?
613+ - [ ] 方法内重要逻辑是否有注释说明?
614+ - [ ] 防御性注释是否保留?
615+
616+ ### 日志
617+ - [ ] ` ILog Log ` 和 ` WriteLog ` 是否放在类的最后?
618+ - [ ] 是否用名为"日志"的 region 包裹?
538619
539620---
540621
0 commit comments