name: check-cross-layer description: “跨层检查”
跨层检查
检查您的更改是否考虑了所有维度。大多数bug源于“没有想到”,而非技术能力不足。
注意:这是一个实施后的安全网。理想情况下,在编写代码之前阅读实施前检查清单。
相关文档
| 文档 | 目的 | 时机 |
|---|---|---|
| 实施前检查清单 | 编码前的问题 | 编写代码前 |
| 代码重用思考指南 | 模式识别 | 实施期间 |
/trellis: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 "value-to-change" src/ - [ ] 如果2个或更多地方定义相同值 -> 应提取到共享常量
- [ ] 修改后,所有使用站点都更新了吗?
- [ ] 如果创建实用工具:是否已存在类似实用工具?
详细指南:.trellis/spec/guides/code-reuse-thinking-guide.md
维度B2:新实用工具函数
触发条件:即将创建新的实用工具/辅助函数
检查清单:
- [ ] 先搜索现有的类似实用工具
grep -r "functionNamePattern" src/ - [ ] 如果类似存在,可以扩展它吗?
- [ ] 如果创建新的,是否在正确位置(共享 vs 特定领域)?
维度B3:批量修改后
触发条件:刚刚在多个文件中修改了类似模式
检查清单:
- [ ] 您检查了所有具有类似模式的文件吗?
grep -r "patternYouChanged" src/ - [ ] 有任何遗漏的文件应该也更新吗?
- [ ] 应该抽象此模式以防止未来重复吗?
维度C:导入/依赖路径(当创建新文件时必需)
触发条件:创建新的源文件
检查清单:
- [ ] 使用正确的导入路径(相对 vs 绝对)?
- [ ] 没有循环依赖?
- [ ] 与项目的模块组织一致?
维度D:同层一致性
触发条件:
- 修改显示逻辑或格式化
- 同一领域概念在多个地方使用
检查清单:
- [ ] 搜索其他使用相同概念的地方
grep -r "ConceptName" src/ - [ ] 这些用法一致吗?
- [ ] 应该共享配置/常量吗?
常见问题快速参考
| 问题 | 根本原因 | 预防措施 |
|---|---|---|
| 更改一处,遗漏其他 | 未搜索影响范围 | 更改前使用grep |
| 数据在某一层丢失 | 未检查数据流 | 跟踪数据源到目的地 |
| 类型/模式不匹配 | 跨层类型不一致 | 使用共享类型定义 |
| UI/输出不一致 | 同一概念在多个地方 | 提取共享常量 |
| 类似实用工具已存在 | 未先搜索 | 创建前搜索 |
| 批量修复不完整 | 未验证所有出现 | 修复后使用grep |
输出
报告:
- 您的更改涉及哪些维度
- 每个维度的检查结果
- 发现的问题和修复建议