You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
8.4 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 命名规则
## 九大命名规则
以下是 **九大通用的良好命名规则**,可用于 API 方法、函数或服务,确保清晰、可维护且易理解。
### 1. 清晰表达功能变化
当新方法基于旧方法但增加了功能时,常见的命名方式:
- **`GetXWithY`**(如 `GetAccountWithCache` → 表达 **在原功能上增加了新特性**
- **`GetXIfY`**(如 `GetAccountIfCached` → 适合 **条件式逻辑**
- **`TryGetX`**(如 `TryGetAccount` → 适合 **尝试获取,可能失败**
- **`EnsureX`**(如 `EnsureAccountLoaded` → 适合 **保证数据存在**
- **`XOrY`**(如 `GetAccountOrNull`)→ 明确返回可能类型
- **`XWithY`** → 新增参数时可扩展(如 `GetAccountWithOptions`
- **`XAsync`** → 明确异步方法(如 `GetAccountAsync`
- **`XIfY`** → 可组合条件(如 `GetAccountIfActive`
- **`XNoY`** → 显式声明功能剥离(如 `GetAccountNoValidation`
- **`AddYToGetX`**(如 `AddCacheToGetAccount`)→ 表示在原功能基础上添加了 **额外的功能**,像是添加缓存机制。
- **`GetXPlusY`**(如 `GetAccountPlusBalance`)→ 表示获取的数据是 **多个相关信息的组合**,例如账户信息和余额信息。
- **`GetXIncludingY`**(如 `GetAccountIncludingTransactions`)→ 表示获取的数据 **包含特定的附加信息或子集**,如账户信息包含交易记录。
### 2. 以数据来源区分
适用于有多个获取途径的情况:
- **`GetXFromCache`** / **`GetXFromDB`**(如 `GetAccountFromCache` → 明确来源
- **`LoadX`**(如 `LoadAccount` → 适合从缓存或数据库加载数据
- **`FetchX`**(如 `FetchAccount` → 适合表示 **可能从远程/缓存获取**
- **`RetrieveX`**(如 `RetrieveAccount` → 泛化的 **数据检索** 方法
- **`ReadX`** → 强调无副作用读取(如 `ReadAccountConfig`
- **`StreamX`** → 流式获取(如 `StreamAccountLogs`
- **`QueryX`** → 强调复杂查询(如 `QueryActiveAccounts`
- **`PullX`** → 主动拉取远程数据(如 `PullLatestAccount`
- **`SyncX`** → 同步本地与远程状态(如 `SyncAccountToCloud`
- **`GetXFromRemote`**(如 `GetAccountFromRemoteServer`)→ 用于表示从 **远程服务器** 获取数据,区别于本地缓存或其他本地存储的数据源。
- **`RefreshX`**(如 `RefreshAccountData`)→ 表示 **强制从源系统获取最新数据**,而不是使用缓存版本。
- **`StreamX`**(如 `StreamAccountUpdates`)→ 适用于从 **数据流** 中获取或推送数据。
### 3. 版本迭代
适用于 **升级替换旧版本**
- **`Xv2` / `XV2`**(如 `GetAccountV2` → 常见但不推荐 **滥用**
- **`XEnhanced`**(如 `GetAccountEnhanced` → 表达增强版本
- **`XOptimized`**(如 `GetAccountOptimized` → 适用于优化性能的版本
- **`XDeprecated`** → 显式标记弃用(如 `GetAccountDeprecated`
- **`XLegacy`** → 旧版兼容方案(如 `GetAccountLegacy`
- **`XBy[条件]`** → 参数化版本(如 `GetAccountByTimestamp`
- **语义化版本** → 适用于服务(如 `AccountServiceV1_2_0`
- **`NextX`**(如 `NextGenerationGetAccount`)→ 表示这是一个 **新一代的实现**,可能包含多方面的改进,如性能、功能等。
- **`LegacyX`**(如 `LegacyGetAccount`)→ 用于标记 **旧版本或即将被淘汰的版本**,以便于后续的维护和升级。
- **`BetaX`**(如 `BetaGetAccount`)→ 表示这是 **测试版或预发布版**,功能可能尚未完全稳定。
### 4. 动作+对象
清晰表达 **行为 + 作用对象**
- **`FindX`**(如 `FindAccount` → 适合搜索/查找
- **`CheckX`**(如 `CheckAccountExists` → 适合 **验证** 逻辑
- **`CreateX`** / **`UpdateX`** / **`DeleteX`**(如 `CreateAccount` → 经典 **CRUD** 方式
- **`ComputeX`**(如 `ComputeAccountBalance` → 适合 **计算结果**
- **`AddX`/`RemoveX`** → 集合操作(如 `AddAccountPermission`
- **`BeginX`/`EndX`** → 事务操作(如 `BeginAccountTransaction`
- **`LockX`/`UnlockX`** → 资源控制(如 `LockAccountEditing`
- **`ExportX`/`ImportX`** → 数据迁移(如 `ExportAccountData`
- **`ValidateX`** → 校验逻辑(如 `ValidateAccountEmail`
- **`GenerateX`**(如 `GenerateAccountReport`)→ 表示 **生成某种数据或报告**,一般可能涉及计算或查询。
- **`TransformX`**(如 `TransformAccountDataForDisplay`)→ 表示对数据进行 **转换**,可能用于适配不同的格式或系统要求。
- **`FilterX`**(如 `FilterAccountByStatus`)→ 表示 **根据特定条件筛选数据**。
### 5. 条件性逻辑
当方法 **可能返回不同结果**
- **`TryX`**(如 `TryGetAccount` → 适合 **失败时不抛异常**
- **`EnsureX`**(如 `EnsureAccountLoaded`**确保某状态达成**
- **`MaybeX`**(如 `MaybeGetAccount`**可能会返回,也可能不会**
- **`XOrElse`** → 提供备选方案(如 `GetAccountOrElseCreate`
- **`XOrDefault`** → 返回默认值(如 `GetAccountOrDefault`
- **`XUnchecked`** → 跳过验证(如 `DeleteAccountUnchecked`
- **`XSafely`** → 强调安全操作(如 `UpdateAccountSafely`
- **`IsX`**(如 `IsAccountActive`)→ 用于 **判断某个条件是否成立**,布尔值返回类型。
- **`ShouldX`**(如 `ShouldAccountBeDenied`)→ 表示逻辑目的是 **判断是否应该执行某个操作**。
- **`DefaultX`**(如 `DefaultGetAccount`)→ 表示使用 **默认策略或配置** 来执行操作。
### 6. 性能特征标记
- **`XFast`** → 性能优化版本(如 `SearchAccountsFast`
- **`XLazy`** → 延迟加载(如 `LoadAccountLazy`
- **`XBatch`** → 批量操作(如 `UpdateAccountsBatch`
- **`XCached`** → 明确缓存策略(如 `GetOrdersCached`
### 7. 领域驱动设计(DDD)风格
- **`RegisterX`** → 领域事件(如 `RegisterAccountCreatedEvent`
- **`ApplyX`** → 状态变更(如 `ApplyAccountDiscount`
- **`CalculateX`** → 领域计算(如 `CalculateAccountRisk`
- **`EstimateX`** → 预测性计算(如 `EstimateAccountGrowth`
### 8. 错误处理模式
- **`XOrError`** → 显式错误返回(如 `GetAccountOrError`
- **`XWithFallback`** → 故障回退(如 `GetConfigWithFallback`
- **`XWithRetry`** → 自动重试策略(如 `SendEmailWithRetry`
- **`XUnsafe`** → 需调用方处理异常(如 `SaveAccountUnsafe`
### 9. 状态变更通知
- **`OnX`** → 事件监听(如 `OnAccountUpdated`
- **`NotifyX`** → 主动通知(如 `NotifyAccountExpired`
- **`ObserveX`** → 观察者模式(如 `ObserveAccountChanges`
- **`SubscribeX`** → 订阅机制(如 `SubscribeAccountAlerts`
## 示例
已知现有一个接口名称叫 `GetAccount` 用户获取用户账户信息, 现在提供一个新接口,核心逻辑跟 `GetAccount` 一样,但增加了缓存功能,这个新接口如何命名?
`GetAccount` 新接口命名 **场景决策树** 如下:
```
┌──────────────┐
│ 需要新增功能? │
└──────┬───────┘
┌─────────────────┬──────┴───────┬──────────────────┐
▼ ▼ ▼ ▼
带缓存? 异步操作? 条件获取? 性能优化?
GetAccountWithCache GetAccountAsync GetAccountIfActive GetAccountOptimized
```
可以考虑以下命名方式:
推荐命名:
1. **`GetAccountWithCache`** (✅ 清晰表达增加了缓存功能)
2. **`GetCachedAccount`** (✅ 直观表达“从缓存获取账户信息”)
3. **`FetchAccount`** (✅ 可以表示“可能来自缓存”)
4. **`RetrieveAccount`** (✅ 更泛化,适用于不同的数据源)
不太推荐的命名:
- `GetAccountV2` ❌(除非是 API 版本升级,否则 v2 容易引起困惑)
- `GetAccountCached` ❌(读起来不太自然)
- `GetAccountFromCache` ❌(容易误解为**只从缓存获取**,不走原始逻辑)
最佳选择:
- 如果想保持与原有命名一致,建议 **`GetAccountWithCache`** 或 **`GetCachedAccount`**。
- 如果希望稍微泛化一点,可以使用 **`FetchAccount`** 或 **`RetrieveAccount`**。