# encapsulate代码

## 规则（Rules）

# 封装代码 - 规范

## 1. 命名规范
| 类型 | 规范 | 示例 |
|------|------|------|
| 函数名 | 小驼峰 | `formatAmount` |
| 变量/参数 | 小写蛇形 | `user_list` |
| 类名 | 大驼峰 | `CacheManager` |
| 常量 | 全大写蛇形 | `MAX_RETRY_COUNT` |
| 文件名 | 小写蛇形 | `string_utils.js` |

## 2. 导出规范
使用 `module.exports = { ... }` 或 `exports.xxx` 方式导出。

## 3. 注释规范
所有函数必须有JSDoc注释，说明功能、参数和返回值。

## 4. 封装原则
- 禁止在通用模块中引入框架特定的API
- 禁止在模块中使用全局变量污染命名空间
- 禁止模块存在外部副作用（如修改全局变量、写入文件系统）

## 方法（Methods）

# 封装代码 - 方法

## 封装形式

### 1. 函数封装
将相关功能函数放在一个模块中导出，适合无状态工具函数。

### 2. 类封装
适合有状态的服务、管理器等复杂对象，使用 `class` 定义。

### 3. 模块封装（module.exports）
将相关工具函数组织为模块对象导出。

### 4. NPM包封装
适合需要跨项目、跨团队复用的功能，包含 package.json、入口文件、源码目录、测试目录。

### 5. 闭包封装
适合需要私有变量和方法的场景。

## 技巧（Tips）

# 封装代码 - 技巧

## 1. 单一职责
每个模块只做一件事，做好一件事。功能复杂的模块应拆分为多个小模块。

## 2. 接口稳定
模块的导出接口一旦确定，尽量保持稳定，避免频繁修改。

## 3. 错误处理
模块内部应妥善处理异常，不将未处理的错误抛到外部。

## 4. 文档先行
先写 README.md 说明API用法，再写实现代码。
