---
name: defensive-coding
type: review_rule
asset_kind: review_rule
routes:
  - code_change
primary_triggers:
  - 防御性编码
  - 防御编程
  - 老系统编码
scope: ['*']
system_scope: ['existing-system']
stages: ["编码与单元测试"]
lifecycle_status: active
owner_mechanism_id: mc-existing-system-review
---

# 防御性编码规则

## 老系统接口调用
- 必须对老系统接口调用添加降级/兜底/重试
- 降级策略：返回兜底数据或走老逻辑
- 重试策略：最多 3 次，指数退避
- 超时设置：必须设置合理的超时时间

## 外部依赖
- 所有外部服务调用必须有 try-catch
- 所有外部服务调用必须设置超时
- 不可控的外部依赖必须有降级方案

## 数据操作
- 写操作必须使用事务
- 批量操作必须有分页/分批处理
- 数据校验在写入前完成

## 错误处理
- 不允许空 catch 块
- 错误日志必须包含上下文信息
- 非预期错误必须向上传播
