影响分析
在进行代码更改之前了解其连锁反应。
什么是影响分析?
影响分析回答这个问题:"如果我更改这个文件,还有什么会受到影响?"
这可以帮助您:
- 更谨慎地计划更改
- 识别所需的测试
- 避免意外的破坏
- 估算更改所需的工作量
运行影响分析
Web 界面
- 选择一个项目
- 在可视化中点击一个文件
- 点击 分析影响
CLI
> /analyze src/services/user.ts
API
curl -X POST https://api.archicore.io/api/v1/projects/:id/analyze \
-H "Authorization: Bearer 您的_API_KEY" \
-d '{"path": "src/services/user.ts"}'
理解结果
src/services/user.ts 的影响分析
╭─────────────────────────────────────────╮
│ 直接依赖 (5) │
├─────────────────────────────────────────┤
│ → src/utils/crypto.ts │
│ → src/db/models/user.ts │
│ → src/config/auth.ts │
│ → src/types/user.ts │
│ → src/utils/validation.ts │
╰─────────────────────────────────────────╯
╭─────────────────────────────────────────╮
│ 依赖者 - 将受影响 (8) │
├─────────────────────────────────────────┤
│ ← src/controllers/auth.ts │
│ ← src/controllers/profile.ts │
│ ← src/controllers/admin.ts │
│ ← src/middleware/auth.ts │
│ ← src/services/session.ts │
│ ← src/api/routes/users.ts │
│ ← tests/user.test.ts │
│ ← tests/auth.test.ts │
╰─────────────────────────────────────────╯
风险等级:中等
受影响测试:2
影响等级
| 等级 | 描述 | 操作 |
|---|---|---|
| 低 | 依赖者少,隔离的更改 | 进行标准审查 |
| 中 | 多个依赖者,风险适中 | 建议进行全面测试 |
| 高 | 许多依赖者,核心模块 | 广泛测试,考虑分阶段发布 |
| 关键 | 影响关键路径 | 额外审查,建议使用功能标志 |
模拟更改
预览提议更改的影响:
> /simulate
描述您的更改:向 UserService.getUser() 添加新参数
模拟结果:
需要更新的文件:
1. src/controllers/auth.ts:34 - 调用 getUser()
2. src/controllers/profile.ts:12 - 调用 getUser()
3. src/services/session.ts:45 - 调用 getUser()
需要更新的测试:
1. tests/user.test.ts - 5 个测试用例调用 getUser()
2. tests/auth.test.ts - 3 个测试用例调用 getUser()
预计工作量:中等(8 个文件,15 个调用点)
最佳实践
进行更改之前
- 运行影响分析 对您计划修改的文件
- 审查依赖链 - 了解影响范围
- 识别受 影响的测试 - 确保它们被更新
- 检查循环依赖 - 它们会放大影响
减少影响
- 使用接口 - 依赖抽象
- 应用 SOLID 原则 - 单一职责限制影响
- 解耦模块 - 减少直接依赖
- 编写外观层 - 隐藏实现细节
示例:安全重构
// 之前:直接依赖
// 更改 User 会影响所有消费者
class UserController {
constructor(private userService: UserService) {}
}
// 之后:接口依赖
// 更改 UserService 实现不会影响消费者
interface IUserService {
getUser(id: string): Promise<User>;
}
class UserController {
constructor(private userService: IUserService) {}
}
CI/CD 集成
将影响分析添加到您的管道:
# .gitlab-ci.yml
impact-analysis:
script:
- archicore analyze --changed-files
- if [ $IMPACT_LEVEL == "critical" ]; then
echo "检测到关键影响 - 需要额外审查";
exit 1;
fi