跳到主要内容

影响分析

在进行代码更改之前了解其连锁反应。

什么是影响分析?

影响分析回答这个问题:"如果我更改这个文件,还有什么会受到影响?"

这可以帮助您:

  • 更谨慎地计划更改
  • 识别所需的测试
  • 避免意外的破坏
  • 估算更改所需的工作量

运行影响分析

Web 界面

  1. 选择一个项目
  2. 在可视化中点击一个文件
  3. 点击 分析影响

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 个调用点)

最佳实践

进行更改之前

  1. 运行影响分析 对您计划修改的文件
  2. 审查依赖链 - 了解影响范围
  3. 识别受影响的测试 - 确保它们被更新
  4. 检查循环依赖 - 它们会放大影响

减少影响

  1. 使用接口 - 依赖抽象
  2. 应用 SOLID 原则 - 单一职责限制影响
  3. 解耦模块 - 减少直接依赖
  4. 编写外观层 - 隐藏实现细节

示例:安全重构

// 之前:直接依赖
// 更改 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