# 编码风格

## 不可变性（关键）

始终创建新对象，永远不要修改现有对象：

```
// 伪代码
错误:  modify(original, field, value) → 就地修改 original
正确: update(original, field, value) → 返回带有更改的新副本
```

原理：不可变数据防止隐藏的副作用，使调试更容易，并启用安全的并发。

## 文件组织

多个小文件 > 少量大文件：
- 高内聚，低耦合
- 典型 200-400 行，最多 800 行
- 从大模块中提取工具函数
- 按功能/领域组织，而非按类型

## 错误处理

始终全面处理错误：
- 在每一层显式处理错误
- 在面向 UI 的代码中提供用户友好的错误消息
- 在服务器端记录详细的错误上下文
- 永远不要静默吞掉错误

## 输入验证

始终在系统边界验证：
- 处理前验证所有用户输入
- 在可用的情况下使用基于模式的验证
- 快速失败并给出清晰的错误消息
- 永远不要信任外部数据（API 响应、用户输入、文件内容）

## 代码质量检查清单

在标记工作完成前：
- [ ] 代码可读且命名良好
- [ ] 函数很小（<50 行）
- [ ] 文件聚焦（<800 行）
- [ ] 没有深层嵌套（>4 层）
- [ ] 正确的错误处理
- [ ] 没有硬编码值（使用常量或配置）
- [ ] 没有变更（使用不可变模式）
