---
name: defensive-programming
description: >
  防御性编程加固。
  Use when: 为空安全、输入校验、失败快速、边界检查加固现有代码
  Do not use when: 大范围重构（refactoring）；无代码的纯设计讨论
---

# 防御性编程加固

细则与检查清单：[references/details.md](references/details.md)

## When / Do not

**Use when**：为空安全、输入校验、失败快速、边界检查加固现有代码  
**Do not use when**：大范围重构（refactoring）；无代码的纯设计讨论

## Input / Output

| Input | Output |
|-------|--------|
| 目标代码/需求/约束 | 可执行改动建议或产出物 + 验证方式 |

## Steps

```
- [ ] 1. 定位外部输入与可空路径
- [ ] 2. 补校验与明确错误
- [ ] 3. 避免吞异常；保留 cause
- [ ] 4. 关键路径可观测（日志）
- [ ] 5. 验证正常/异常用例
```

## 硬规则摘要

- 不引入无必要的过度封装

## 失败策略

| 失败 | 动作 |
|------|------|
| 范围过大 | 拆任务，先交付最小可验证切片 |
| 信息不足 | 列出最小待确认项，不臆造业务事实 |

## 验证

- 说明改了什么、如何验证、剩余风险
