name: check-cross-layer description: “跨层检查”
跨层检查
检查您的更改是否考虑了所有维度。大多数bug来自于“没想到它”,而不是缺乏技术技能。
注意:这是一个后实现的安全网。理想情况下,在编写代码之前阅读预实现检查清单。
相关文档
| 文档 | 目的 | 时机 |
|---|---|---|
| 预实现检查清单 | 编码前的问题 | 在编写代码之前 |
| 代码重用思考指南 | 模式识别 | 实现期间 |
$check-cross-layer (此技能) |
验证检查 | 在实现之后 |
执行步骤
1. 识别更改范围
git status
git diff --name-only
2. 选择适用的检查维度
基于您的更改类型,执行以下相关检查:
维度A:跨层数据流(当涉及3+层时需要)
触发:更改涉及3个或更多层
| 层 | 常见位置 |
|---|---|
| API/路由 | routes/, api/, handlers/, controllers/ |
| 服务/业务逻辑 | services/, lib/, core/, domain/ |
| 数据库/存储 | db/, models/, repositories/, schema/ |
| UI/表示层 | components/, views/, templates/, pages/ |
| 工具 | utils/, helpers/, common/ |
检查清单:
- [ ] 读取流:数据库 -> 服务 -> API -> UI
- [ ] 写入流:UI -> API -> 服务 -> 数据库
- [ ] 类型/模式在层之间正确传递?
- [ ] 错误正确传播到调用者?
- [ ] 在每个层处理加载/挂起状态?
详细指南:.trellis/spec/guides/cross-layer-thinking-guide.md
维度B:代码重用(当修改常量/配置时需要)
触发:
- 修改UI常量(标签、图标、颜色)
- 修改任何硬编码值
- 在多个地方看到相似代码
- 创建新的工具/辅助函数
- 刚完成跨文件的批量修改
检查清单:
- [ ] 先搜索:这个值在多少地方定义?
# 在源文件中搜索(根据项目调整扩展名) grep -r "要更改的值" src/ - [ ] 如果2+个地方定义了相同的值 -> 应该提取到共享常量
- [ ] 修改后,所有使用站点都更新了吗?
- [ ] 如果创建工具:类似的工具是否已经存在?
详细指南:.trellis/spec/guides/code-reuse-thinking-guide.md
维度B2:新工具函数
触发:即将创建新的工具/辅助函数
检查清单:
- [ ] 先搜索现有的类似工具
grep -r "函数名称模式" src/ - [ ] 如果类似存在,是否可以扩展它?
- [ ] 如果创建新的,它是否在正确的位置(共享与领域特定)?
维度B3:批量修改后
触发:刚在多个文件中修改了相似模式
检查清单:
- [ ] 您检查了所有具有相似模式的文件吗?
grep -r "您更改的模式" src/ - [ ] 是否有任何文件被遗漏,也应该更新?
- [ ] 应该将此模式抽象化以防止未来重复吗?
维度C:导入/依赖路径(当创建新文件时需要)
触发:创建新的源文件
检查清单:
- [ ] 使用正确的导入路径(相对与绝对)?
- [ ] 没有循环依赖?
- [ ] 与项目的模块组织一致?
维度D:同层一致性
触发:
- 修改显示逻辑或格式
- 相同领域概念在多个地方使用
检查清单:
- [ ] 搜索使用相同概念的其他地方
grep -r "概念名称" src/ - [ ] 这些使用是否一致?
- [ ] 它们应该共享配置/常量吗?
常见问题快速参考
| 问题 | 根本原因 | 预防 |
|---|---|---|
| 更改了一个地方,遗漏了其他 | 没有搜索影响范围 | 更改前使用 grep |
| 数据在某个层丢失 | 没有检查数据流 | 从数据源追踪到目的地 |
| 类型/模式不匹配 | 跨层类型不一致 | 使用共享类型定义 |
| UI/输出不一致 | 相同概念在多个地方 | 提取共享常量 |
| 类似工具存在 | 没有先搜索 | 创建前搜索 |
| 批量修复不完整 | 没有验证所有出现 | 修复后使用 grep |
输出
报告:
- 您的更改涉及哪些维度
- 每个维度的检查结果
- 发现的问题和修复建议