节点在线、应用在线、配置在线使用令牌查询
|
# NewLife Copilot å作指令
本说明适用于新生命团队(NewLife)åŠå…¶å…¨éƒ¨å¼€æº/è¡ç”Ÿé¡¹ç›®ï¼Œè§„范 Copilot åŠç±»ä¼¼æ™ºèƒ½åŠ©æ‰‹åœ¨ C#/.NET 项目ä¸çš„å作行为。
> ç›®æ ‡ï¼šæŠŠ"æ¯æ¬¡è¯·æ±‚å¿…é¡»æºå¸¦çš„通用规则"æŽ§åˆ¶åœ¨å¯æŽ¥å—体积;组件/业务专项æµç¨‹æ”¾åœ¨ `.github/instructions/`,按需读å–。
---
## 1. æ ¸å¿ƒåŽŸåˆ™
| 原则 | 说明 |
|------|------|
| **ææ•ˆ** | å‡å°‘æœºæ¢°æ ·æ¿ï¼Œèšç„¦ä¸šåŠ¡/æ ¸å¿ƒç®—æ³• |
| **一致** | é£Žæ ¼ã€ç»“æž„ã€å‘½åã€API 行为稳定 |
| **坿ާ** | é™åˆ¶æ”¹åЍ影å“é¢ï¼Œå¯å®¡è®¡ï¼Œå…¼å®¹å‹å¥½ |
| **å¯é ** | 先检索å†ç”Ÿæˆï¼Œä¸è™šæž„,ä¸ç ´å现有åˆçº¦ |
| **主动** | å‘现问题主动修å¤ï¼Œä¸å›žé¿åˆç†ä¼˜åŒ– |
---
## 2. 适用范围
- å« NewLife 组件或è¡ç”Ÿçš„全部 C#/.NET 仓库
- ä¸å«çº¯å‰ç«¯/éž .NET/市场文案
- å˜åœ¨æœ¬æ–‡ä»¶ → å¿…é¡»éµå¾ª
---
## 3. ç»„ä»¶ä¸“ç”¨æŒ‡ä»¤ç´¢å¼•ï¼ˆæŒ‰éœ€åŠ è½½ï¼‰
以下专用指令**仅在相关任务时**æ‰éœ€è¦è¯»å–,é¿å…æ¯æ¬¡è¯·æ±‚都æºå¸¦å¤§æ®µæµç¨‹/示例。
### 3.1 XCode / Cube(数æ®åº“ & Web 快速开å‘)
当任务涉åŠä»¥ä¸‹ä»»ä¸€ä¿¡å·æ—¶ï¼Œè¯·**å…ˆæœç´¢å¹¶æ£€æŸ¥å½“å‰ä»“库** `.github/instructions/xcode.instructions.md` **是å¦å˜åœ¨**,若å˜åœ¨åˆ™è¯»å–å¹¶éµå¾ªï¼š
- 需求包å«ï¼šXCode/Cube/锿–¹/实体生æˆ/模型 XML/æ•°æ®ç±»åº“/æ•°æ®åº“ CRUD/Controller 生æˆ/`xcodetool`/`xcode` 命令
- 解决方案/项目ä¸å‡ºçŽ°ï¼š`NewLife.XCode` 包引用
- å˜åœ¨ï¼š`Model.xml`ã€`*.xcode.xml`ã€`*.Data.csproj`(或项目å以 `.Data` 结尾)
- 代ç 出现命å空间/类型:`XCode.*`ã€`Entity`(XCode 实体基类)ã€XCode 相关特性/接å£
- **用户æåˆ°ä¿®æ”¹ä»»æ„ `.xml` 文件**(如 `member.xml`ã€`area.xml` ç‰é…置文件),应**主动æœç´¢** `xcode.instructions.md` åˆ¤æ–æ˜¯å¦éœ€è¦å¼•å…¥
**主动检测ç–ç•¥**:当用户æåŠ XML 文件修改时,å³ä½¿æœªæ˜Žç¡®æåˆ° XCode 关键å—,也应先用 `file_search` æœç´¢ `xcode.instructions.md`,若å˜åœ¨åˆ™è¯»å–,以确定该 XML 文件是å¦å±žäºŽ XCode/Cube 体系。
未满足以上æ¡ä»¶æ—¶ï¼Œ**ä¸è¦**引入 XCode/Cube åˆå§‹åŒ–æµç¨‹ï¼Œé¿å…干扰其它仓库的常规开å‘。
---
## 4. 工作æµ
```
需求分类 → 检索 → 评估 → 设计 → 实施 → éªŒè¯ â†’ 说明
```
1. **需求分类**:功能/ä¿®å¤/性能/釿ž„/文档
2. **检索**:相关类型ã€ç›®å½•ã€æ–¹æ³•ã€å·²æœ‰æ‰©å±•/工具(**优先å¤ç”¨**)
3. **评估**:是å¦å…¬å…± APIï¼Ÿæ˜¯å¦æ€§èƒ½çƒç‚¹ï¼Ÿ**是å¦å˜åœ¨æ½œåœ¨é—®é¢˜ï¼Ÿ**
4. **设计**:列出改动点 + 兼容/é™çº§ç–ç•¥
5. **实施**:
- 完æˆç”¨æˆ·è¯·æ±‚çš„æ ¸å¿ƒä»»åŠ¡
- **顺带修å¤**å‘çŽ°çš„æ˜Žæ˜¾ç¼ºé™·ï¼ˆèµ„æºæ³„æ¼ã€ç©ºå¼•用ã€é€»è¾‘错误)
- **顺带优化**å¯ç®€åŒ–çš„é‡å¤ä»£ç
- ä¿ç•™åŽŸæ³¨é‡Šä¸Žç»“æž„ï¼Œé™¤éžæ³¨é‡Šæœ¬èº«æœ‰è¯¯
6. **验è¯**:
- 代ç å˜æ›´ï¼šå¿…须编译通过;è¿è¡Œç›¸å…³å•元测试(未找到需说明)
- ä»…æ–‡æ¡£å˜æ›´ï¼ˆæœªä¿®æ”¹ä»»ä½•ä»£ç æ–‡ä»¶ï¼‰ï¼šå¯è·³è¿‡ç¼–译与å•元测试
7. **说明**ï¼šå˜æ›´æ‘˜è¦/å½±å“范围/风险点
### 4.1 主动优化原则
å½“ç”¨æˆ·è¯·æ±‚åˆ†æžæˆ–ä¼˜åŒ–ä»£ç æ—¶ï¼Œ**应主动**:
| 类型 | 行动 |
|------|------|
| **架构梳ç†** | 梳ç†ä»£ç æž¶æž„å¹¶è¿›è¡Œé‡æž„,让代ç 结构更清晰易懂 |
| **è¯æ³•现代化** | 使用最新的 C# è¯æ³•æ¥ç®€åŒ–代ç ,æå‡å¯è¯»æ€§ |
| **缺陷修å¤** | èµ„æºæ³„æ¼ã€ç©ºå¼•用风险ã€å¹¶å‘问题ã€é€»è¾‘错误 → 直接修å¤ï¼Œè®©ä»£ç æ›´å¥å£® |
| **性能优化** | æ— ç”¨åˆ†é…ã€é‡å¤è®¡ç®—ã€å¯æ± åŒ–èµ„æº â†’ 通过缓å˜å‡å°‘耗时的é‡å¤è®¡ç®— |
| **代ç 简化** | é‡å¤ä»£ç æå–ã€å†—余判æ–åˆå¹¶ã€çŽ°ä»£è¯æ³•æ›¿æ¢ â†’ 在ä¸å½±å“å¯è¯»æ€§å‰æä¸‹ç®€åŒ– |
| **注释完善** | è¡¥å……ç±»ã€æŽ¥å£ã€å±žæ€§ã€æ–¹æ³•å¤´éƒ¨çš„æ³¨é‡Šï¼Œä»¥åŠæ–¹æ³•内部é‡è¦ä»£ç 的注释 |
| **æž¶æž„å‚考** | å‚考网络上åŒç±»åŠŸèƒ½çš„ä¼˜ç§€æž¶æž„ï¼Œç»™å‡ºæž¶æž„è°ƒæ•´å»ºè®® |
**架构调整ç–ç•¥**:
- **改动较å°**:直接调整,完æˆåŽè¯´æ˜Žå˜æ›´å†…容
- **改动较大**:先列出调整方案,询问用户æ„è§ï¼Œå¾…确认åŽå†ä¿®æ”¹
**ä¸åº”过度ä¿å®ˆ**:
- âŒ ä»…æ·»åŠ æ³¨é‡Šè€Œå¿½ç•¥æ˜Žæ˜¾çš„ä»£ç 问题
- ⌠å‘çŽ°èµ„æºæ³„æ¼å´ä¸ä¿®å¤
- ⌠看到é‡å¤ä»£ç å´ä¸æå–
- âŒ ç”¨æˆ·è¦æ±‚优化时åªåšè¡¨é¢å·¥ä½œ
**ä¿æŒè°¨æ…Žçš„场景**:
- 公共 API ç¾åå˜æ›´ → 需说明兼容性影å“
- 性能关键路径 → éœ€æœ‰ä¾æ®æˆ–说明推ç†
- å¤§èŒƒå›´é‡æž„ → 需先与用户确认范围
### 4.2 防御性注释规则
在旧有代ç ä¸ï¼Œç»å¸¸å¯ä»¥çœ‹åˆ°**被注释掉的代ç **,这些注释代ç å‰é¢é€šå¸¸å¸¦æœ‰è¯´æ˜Žæ–‡å—。
**这些是防御性注释**:
- 记录了过去曾ç»è¸©è¿‡çš„å‘
- ç›®çš„æ˜¯å‘Šè¯‰åŽæ¥äººä¸è¦æŒ‰ç…§æ³¨é‡Šä»£ç 去写,å¦åˆ™ä¼šæœ‰é—®é¢˜
- **ç¦æ¢åˆ 除æ¤ç±»é˜²å¾¡æ€§æ³¨é‡Š**,用于è¦ç¤ºåŽäºº
**识别特å¾**:
```csharp
// 曾ç»å°è¯•è¿‡åŒæ¥ç‰å¾…ï¼Œä½†ä¼šå¯¼è‡´çº¿ç¨‹æ± é¥¥é¥¿å’Œæ»é”
// var result = task.Result;
// ä¸è¦ä½¿ç”¨ SendAsync çš„æ— è¶…æ—¶é‡è½½ï¼Œå¦åˆ™ä¼šé€ æˆè¿žæŽ¥æ³„æ¼
// await client.SendAsync(data);
// 这里ä¸èƒ½ç”¨ Flushï¼Œå› ä¸ºåº•å±‚ SSL æµä¼šæŠ›å‡º ObjectDisposedException
// stream.Flush();
// ä¸è¦æ”¹æˆ ConfigureAwait(true),会导致 UI 线程æ»é”
// await Task.Delay(100).ConfigureAwait(true);
```
**处ç†åŽŸåˆ™**:
- ✅ ä¿ç•™è¿™ç±»å¸¦è¯´æ˜Žçš„æ³¨é‡Šä»£ç
- ✅ å¯ä»¥è¡¥å……更详细的说明,解释为什么ä¸èƒ½è¿™æ ·åš
- ⌠ä¸è¦åˆ 除这类防御性注释
- ⌠ä¸è¦å°è¯•"æ¢å¤"这些被注释的代ç
---
## 5. ç¼–ç 规范
### 5.1 基础规范
| 项目 | 规范 |
|------|------|
| è¯è¨€ç‰ˆæœ¬ | `<LangVersion>latest</LangVersion>`ï¼Œæ‰€æœ‰ç›®æ ‡æ¡†æž¶å‡ä½¿ç”¨æœ€æ–° C# è¯æ³• |
| 命å空间 | file-scoped namespace |
| 类型å | **å¿…é¡»**使用 .NET æ£å¼å `String`/`Int32`/`Boolean` ç‰ï¼Œé¿å… `string`/`int`/`bool` |
| 兼容性 | 代ç 需兼容 .NET 4.5+ï¼›**ç¦æ¢**使用 `ArgumentNullException.ThrowIfNull`,改用 `if (value == null) throw new ArgumentNullException(nameof(value));` |
| 啿–‡ä»¶ | æ¯æ–‡ä»¶ä¸€ä¸ªä¸»è¦å…¬å…±ç±»åž‹ï¼›è¾ƒå¤§å¹³å°å·®å¼‚使用 `partial` |
### 5.2 命å规范
| æˆå‘˜ç±»åž‹ | 命å规则 | 示例 |
|---------|---------|------|
| 类型/公共æˆå‘˜ | PascalCase | `UserService`ã€`GetName()` |
| 傿•°/局部å˜é‡ | camelCase | `userName`ã€`count` |
| ç§æœ‰å—段(实例/陿€ï¼‰ | `_camelCase` | `_cache`ã€`_instance` |
| 属性/方法(实例/陿€ï¼‰ | PascalCase | `Name`ã€`Default`ã€`Create()` |
| 扩展方法类 | `xxxHelper` 或 `xxxExtensions` | `StringHelper`ã€`CollectionExtensions` |
### 5.3 代ç é£Žæ ¼
```csharp
// ✅ å•行 if:å•è¯å¥ä¸”整行ä¸è¿‡é•¿æ—¶åŒè¡Œ
if (value == null) return;
if (key == null) throw new ArgumentNullException(nameof(key));
// ✅ å•行 if:è¯å¥è¾ƒé•¿æ—¶å¦èµ·ä¸€è¡Œ
if (value == null)
throw new ArgumentNullException(nameof(value), "Value cannot be null");
// ✅ 多分支å•è¯å¥ï¼šä¸åŠ èŠ±æ‹¬å·
if (count > 0)
DoSomething();
else
DoOther();
// ✅ 循环必须ä¿ç•™èŠ±æ‹¬å·ï¼ˆå³ä½¿å•è¯å¥ï¼‰
foreach (var item in list)
{
Process(item);
}
// ✅ using è¯å¥ï¼šä¼˜å…ˆä½¿ç”¨ using declarationï¼ˆæ— èŠ±æ‹¬å·ï¼‰
using var stream = File.OpenRead("file.txt");
using var reader = new StreamReader(stream);
return reader.ReadToEnd();
// ✅ using 弃元:仅用于需è¦èµ„æºç”Ÿå‘½å‘¨æœŸä½†ä¸éœ€è¦å¼•用的场景
// 例如:分布å¼é”ã€æ€§èƒ½è¿½è¸ª Spanã€ä¸´æ—¶æ–‡ä»¶é”ç‰
using var _ = _lock.AcquireLock();
DoSomething();
// æ–¹æ³•ç»“æŸæ—¶è‡ªåŠ¨é‡Šæ”¾é”
// âš ï¸ using è¯å¥ï¼šä»…åœ¨éœ€è¦æå‰ç»“æŸä½œç”¨åŸŸæ—¶ä½¿ç”¨èŠ±æ‹¬å·
using (var connection = CreateConnection())
{
connection.Open();
// ... 执行æ“作
}
// 这里 connection 已释放,å¯ä»¥ç»§ç»æ‰§è¡Œå…¶ä»–æ“作
```
### 5.4 Region 组织结构
较长的类使用 `#region` 分段组织,顺åºä¸ºï¼š`属性` → `陿€`(如有)→ `æž„é€ ` → `方法` → `辅助`(如有)→ `日志`。
**日志 Region 规则**:
- 类代ç ä¸å¦‚果带有 `ILog Log { get; set; }` å’Œ `WriteLog` 方法
- **必须放在类代ç 的最åŽ**
- **必须用å为"日志"çš„ region 包裹**
- ä¸è¦æ”¾åœ¨"辅助" region ä¸ï¼Œåº”å•独作为"日志" region
### 5.5 现代 C# è¯æ³•
ä¼˜å…ˆä½¿ç”¨æœ€æ–°è¯æ³•(switch 表达å¼ã€æ¨¡å¼åŒ¹é…ã€ç›®æ ‡ç±»åž‹ `new`ã€record ç‰ï¼‰ï¼Œå³ä½¿ç›®æ ‡æ¡†æž¶æ˜¯ net45。
### 5.6 集åˆè¡¨è¾¾å¼
优先使用集åˆè¡¨è¾¾å¼ `[]` åˆå§‹åŒ–集åˆï¼š`List<String> Tags { get; set; } = [];`
### 5.7 Null æ¡ä»¶è¿ç®—符
优先使用 `?.` / `??` 简化空值检查:`span?.AppendTag("test");` `var name = user?.Profile?.Name ?? "";`
---
## 6. å¤šç›®æ ‡æ¡†æž¶
NewLife æ”¯æŒ `net45` 到 `net10`,常用æ¡ä»¶ç¬¦å·ï¼š`NETFRAMEWORK`ã€`NETSTANDARD2_0`ã€`NETCOREAPP`ã€`NET5_0_OR_GREATER`ã€`NET6_0_OR_GREATER`ã€`NET8_0_OR_GREATER`。
新增 API æ—¶éœ€è¯„ä¼°å„æ¡†æž¶å…¼å®¹æ€§ï¼Œå¿…è¦æ—¶æä¾›é™çº§å®žçŽ°ã€‚
---
## 7. 文档注释
| 规则 | 说明 |
|------|------|
| `<summary>` | **å¿…é¡»åŒä¸€è¡Œé—åˆ**ï¼Œç®€çŸæè¿°æ–¹æ³•ç”¨é€” |
| `<param>` | **必须为æ¯ä¸ªå‚æ•°æ·»åŠ **ï¼Œæ— è®ºæ–¹æ³•å¯è§æ€§å¦‚何 |
| `<returns>` | æœ‰è¿”å›žå€¼æ—¶å¿…é¡»æ·»åŠ |
| `<remarks>` | 夿‚方法å¯å¢žåŠ è¯¦ç»†è¯´æ˜Žï¼ˆå¯å¤šè¡Œï¼‰ |
| 覆盖范围 | `public`/`protected` æˆå‘˜å¿…须注释;`private`/`internal` å»ºè®®æ·»åŠ |
| `[Obsolete]` | 必须包å«è¿ç§»å»ºè®® |
**æ£ç¡®ç¤ºä¾‹**:`/// <summary>获å–åç§°</summary>` `/// <param name="id">ç¼–å·</param>`
**ç¦æ¢**:`<summary>` 拆æˆå¤šè¡Œï¼›ç¼ºå°‘ `<param>`ï¼›æœ‰å‚æ•°ä½†æ— param æ ‡ç¾ã€‚
---
## 8. 异æ¥ä¸Žæ€§èƒ½
| 规范 | 说明 |
|------|------|
| 方法命å | å¼‚æ¥æ–¹æ³•åŽç¼€ `Async` |
| ConfigureAwait | 库内部默认 `ConfigureAwait(false)` |
| 高频路径 | ä¼˜å…ˆå¯¹è±¡æ± /`ArrayPool<T>`/`Span`,é¿å…å¤šä½™åˆ†é… |
| åå°„/Linq | 仅用于éžçƒç‚¹è·¯å¾„ï¼›çƒç‚¹ä½¿ç”¨æ‰‹å†™å¾ªçޝ/ç¼“å˜ |
| æ± åŒ–èµ„æº | 明确获å–/归还;异常分支ä¸é—失归还 |
**内置工具优先**:`Pool.StringBuilder`ã€`Runtime.TickCount64`ã€`ToInt()`/`ToBoolean()` ç‰æ‰©å±•方法。
---
## 9. 日志与追踪
è§„åˆ™ï¼šè‹¥ç±»åŒ…å« `ILog Log` 与 `WriteLog`,必须放在类末尾,并用å为"日志"çš„ `#region` 包裹;关键过程å¯ä½¿ç”¨ `Tracer?.NewSpan()` 埋点。
---
## 10. 错误处ç†
- **精准异常类型**:`ArgumentNullException`/`InvalidOperationException` ç‰
- **傿•°æ ¡éªŒ**:空/越界/æ ¼å¼
- **TryXxx 模å¼**:ä¸ç”¨å¼‚常作常规分支
- **类型转æ¢**:优先使用 `ToInt()`/`ToBoolean()` ç‰æ‰©å±•方法
- **对外异常**ï¼šä¸æš´éœ²å†…部实现/路径
---
## 11. 测试规范
| 项目 | 规范 |
|------|------|
| 框架 | xUnit |
| 命å | `{ClassName}Tests` |
| æè¿° | `[DisplayName("䏿–‡æè¿°æ„图")]` |
| IO | 使用临时目录;端å£ç”¨ 0/éšæœº |
| 覆盖 | æ£å¸¸/边界/异常/å¹¶å‘ï¼ˆå¿…è¦æ—¶ï¼‰ |
### 测试执行ç–ç•¥
1. 优先检索 `{ClassName}` 引用,若è½å…¥æµ‹è¯•项目则è¿è¡Œ
2. 未命ä¸åˆ™æŸ¥æ‰¾ `{ClassName}Tests.cs`
3. **未å‘现相关测试需明确说明**,ä¸è‡ªåŠ¨åˆ›å»ºæµ‹è¯•é¡¹ç›®
---
## 12. NuGet å‘布规范
| 类型 | 命å规则 | 示例 |
|------|---------|------|
| æ£å¼ç‰ˆ | `{主版本}.{å版本}.{å¹´}.{月日}` | `11.9.2025.0701` |
| 测试版 | `{主版本}.{å版本}.{å¹´}.{月日}-beta{时分}` | `11.9.2025.0701-beta0906` |
- **æ£å¼ç‰ˆ**ï¼šæ¯æœˆæœˆåˆå‘布
- **测试版**:æäº¤ä»£ç 到 GitHub 时自动å‘布
---
## 13. Markdown 文档规范
| 项目 | 规范 |
|------|------|
| 文件编ç | **å¿…é¡»** UTF-8,**ç¦æ¢** GB2312/GBK/UTF-8 BOM |
| é»˜è®¤å˜æ”¾ | 代ç åº“æ ¹ç›®å½•ä¸‹çš„ `Doc` 目录 |
| 文件命å | 优先**䏿–‡æ–‡ä»¶å**ï¼Œç®€æ´æè¿°å†…å®¹ |
**注æ„**:已有文件**必须先读å–**å†å¢žé‡ä¿®æ”¹ï¼Œ**ç¦æ¢ç›´æŽ¥è¦†ç›–**。
---
## 14. Copilot 行为守则
### å¿…é¡»
- ç®€ä½“ä¸æ–‡å›žå¤
- è¾“å‡ºå‰æ£€ç´¢çŽ°æœ‰å®žçŽ°ï¼Œ**ç¦æ¢é‡å¤é€ è½®å**
- 先列方案å†å®žçް
- æ ‡è®°ä¸ç¡®å®šä¸Šä¸‹æ–‡ä¸º"需查看文件"
- **å‘现明显缺陷时主动修å¤**ï¼ˆèµ„æºæ³„æ¼ã€ç©ºå¼•用ã€é€»è¾‘错误)
- **ç”¨æˆ·è¦æ±‚优化时深入分æž**,ä¸åšè¡¨é¢å·¥ä½œ
### 鼓励
- æå–é‡å¤ä»£ç 为公共方法
- 简化冗余的æ¡ä»¶åˆ¤æ–
- 使用现代 C# è¯æ³•改进å¯è¯»æ€§
- 补充缺失的资æºé‡Šæ”¾é€»è¾‘
- ä¿®æ£é”™è¯¯æˆ–过时的注释
### ç¦æ¢
- 虚构 API/文件/类型
- ä¼ªé€ æµ‹è¯•ç»“æžœ/性能数æ®
- æ“…è‡ªåˆ é™¤å…¬å…±/å—ä¿æŠ¤æˆå‘˜
- æ“…è‡ªåˆ é™¤å·²æœ‰ä»£ç æ³¨é‡Šï¼ˆé™¤éžæ³¨é‡Šæœ¬èº«é”™è¯¯ï¼‰
- **åˆ é™¤é˜²å¾¡æ€§æ³¨é‡Š**(带说明的注释代ç ,记录历å²è¸©å‘ç»éªŒï¼‰
- ä»…åˆ é™¤ç©ºç™½è¡Œåˆ¶é€ "æ ¼å¼ä¼˜åŒ–"æäº¤
- åˆ é™¤å¾ªçŽ¯ä½“çš„èŠ±æ‹¬å·
- å°† `<summary>` 拆æˆå¤šè¡Œ
- 将 `String`/`Int32` 改为 `string`/`int`
- 新增外部ä¾èµ–(除éžè¯´æ˜Žç†ç”±å¹¶ç»™å‡ºæƒè¡¡ï¼‰
- 在çƒç‚¹è·¯å¾„æ·»åŠ æœªç¼“å˜åå°„/夿‚ Linq
- è¾“å‡ºæ•æ„Ÿå‡æ®/内部地å€
- **å‘现问题å´è§†è€Œä¸è§**
- **ç”¨æˆ·è¦æ±‚ä¼˜åŒ–æ—¶ä»…åšæ³¨é‡Š/测试ç‰è¡¨é¢å·¥ä½œ**
---
## 15. å˜æ›´è¯´æ˜Žæ¨¡æ¿
æäº¤æˆ–ç”å¤éœ€åŒ…å«ï¼š
```markdown
## 概述
åšäº†ä»€ä¹ˆ / 为什么
## å½±å“
- 公共 API:是/å¦
- 性能影å“ï¼šæ— /有(说明)
## 兼容性
é™çº§ç–ç•¥ / æ¡ä»¶ç¼–译点
## 风险
潜在回归 / 性能开销
## åŽç»
是å¦è¡¥æµ‹è¯• / 文档
```
---
## 16. 术è¯è¯´æ˜Ž
| æœ¯è¯ | 定义 |
|------|------|
| **çƒç‚¹è·¯å¾„** | ç»æ€§èƒ½åˆ†æžæˆ–é«˜é¢‘è°ƒç”¨æ ˆç¡®è®¤çš„å…³é”®æ‰§è¡Œæ®µ |
| **基线** | å˜æ›´å‰çš„功能/性能å‚è€ƒæ•°æ® |
| **顺带修å¤** | 在完æˆä¸»ä»»åŠ¡è¿‡ç¨‹ä¸ï¼Œä¿®å¤å‘现的相关问题 |
| **防御性注释** | 被注释掉的代ç ,å‰é¢å¸¦æœ‰è¯´æ˜Žï¼Œè®°å½•历å²è¸©å‘ç»éªŒï¼Œç”¨äºŽè¦ç¤ºåŽäºº |
---
## 17. 代ç 优化检查清å•
当进行代ç 优化时,按以下清å•é€é¡¹æ£€æŸ¥ï¼š
### 架构与结构
- [ ] ä»£ç æž¶æž„æ˜¯å¦æ¸…晰?是å¦éœ€è¦é‡æž„?
- [ ] 类的èŒè´£æ˜¯å¦å•一?是å¦éœ€è¦æ‹†åˆ†ï¼Ÿ
- [ ] æ˜¯å¦æœ‰é‡å¤ä»£ç å¯ä»¥æå–为公共方法?
- [ ] Region 组织是å¦ç¬¦åˆè§„èŒƒï¼ˆå±žæ€§â†’é™æ€â†’æž„é€ â†’æ–¹æ³•â†’è¾…åŠ©â†’æ—¥å¿—ï¼‰ï¼Ÿ
### è¯æ³•现代化
- [ ] 是å¦å¯ä»¥ä½¿ç”¨æ›´ç®€æ´çš„ C# è¯æ³•?(switch 表达å¼ã€æ¨¡å¼åŒ¹é…ç‰ï¼‰
- [ ] 集åˆåˆå§‹åŒ–是å¦ä½¿ç”¨äº†é›†åˆè¡¨è¾¾å¼ `[]`?
- [ ] 是å¦å¯ä»¥ä½¿ç”¨ null æ¡ä»¶è¿ç®—符 `?.` 简化代ç ?
### å¥å£®æ€§
- [ ] 是å¦å˜åœ¨ç©ºå¼•用风险?
- [ ] èµ„æºæ˜¯å¦æ£ç¡®é‡Šæ”¾ï¼Ÿï¼ˆIDisposableã€æµã€è¿žæŽ¥ç‰ï¼‰
- [ ] å¼‚å¸¸å¤„ç†æ˜¯å¦å®Œå–„?
- [ ] å¹¶å‘场景是å¦çº¿ç¨‹å®‰å…¨ï¼Ÿ
### 性能
- [ ] 是å¦å˜åœ¨å¯ä»¥ç¼“å˜çš„é‡å¤è®¡ç®—?
- [ ] æ˜¯å¦æœ‰ä¸å¿…è¦çš„对象分é…?
- [ ] çƒç‚¹è·¯å¾„是å¦é¿å…了åå°„å’Œå¤æ‚ Linq?
- [ ] 是å¦ä½¿ç”¨äº†å¯¹è±¡æ± /ArrayPool ç‰æ± 化技术?
### 注释与文档
- [ ] ç±»ã€æŽ¥å£æ˜¯å¦æœ‰ `<summary>` 注释?
- [ ] å…¬å…±æ–¹æ³•æ˜¯å¦æœ‰å®Œæ•´çš„傿•°å’Œè¿”回值注释?
- [ ] 方法内é‡è¦é€»è¾‘æ˜¯å¦æœ‰æ³¨é‡Šè¯´æ˜Žï¼Ÿ
- [ ] 防御性注释是å¦ä¿ç•™ï¼Ÿ
### 日志
- [ ] `ILog Log` å’Œ `WriteLog` æ˜¯å¦æ”¾åœ¨ç±»çš„æœ€åŽï¼Ÿ
- [ ] 是å¦ç”¨å为"日志"çš„ region 包裹?
---
(完)
|