Deptrac - PHP依赖分层检查工具,适用于架构规则验证与代码解耦分析
在现代 PHP 项目中,随着业务增长,模块与层之间的依赖关系往往会变得混乱,导致代码耦合度高、维护困难。Deptrac 的出现,就是为了让开发者可视化并强制实施架构依赖规则,通过分析类之间的引用关系,发现违反既定分层策略的情况。例如,它可以阻止控制器直接依赖数据持久层,确保系统遵循“上层不越界访问下层”的设计原则。虽然原仓库已迁移至 https://github.com/deptrac/deptrac,但它的核心价值依旧是帮助团队守住架构边界、提升代码可维护性。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | deptrac |
| GitHub地址 | https://github.com/opensoftwareconsulting/deptrac |
| 项目描述 | 暂无描述 |
| 作者 | opensoftwareconsulting |
| 开源协议 | MIT License |
| Stars | 1 |
| Forks | 0 |
| 支持平台 | Windows / macOS / Linux / Web |
| 最后更新 | 2025-11-18 |
一、项目介绍
Deptrac(Dependency Tracker)是一个专为 PHP 设计的静态代码分析工具,它的主要任务是根据项目定义的“分层架构规则”,扫描代码库中的类引用关系,并报告所有违反规则的依赖。
核心概念:
- Layer(层):将代码按职责划分为若干组,例如 Controller、Service、Repository。
- Rule(规则):定义哪些层可以依赖哪些层,例如 Service 可依赖 Repository,但不可反向依赖。
- 分析报告:输出违规依赖列表,可生成控制台、JSON、JUnit 等格式,方便集成到 CI。
工作流程:
- 解析 PHP 文件生成类依赖图。
- 对照
.deptrac.yml中的分层与规则配置。 - 标记所有非法依赖并输出结果。
Deptrac renamed it's top-level namespace: please go to: https://github.com/deptrac/deptrac
二、核心优势
- 开源免费
基于 MIT 许可,可自由用于个人或商业项目。 - 社区支持
新仓库由原始作者维护,社区活跃,问题与 PR 能得到及时响应。 - 持续更新
随着 PHP 新版本与 Composer 生态演进,工具保持兼容与功能增强。
三、适用场景
- 开发者学习和参考
通过实例了解分层架构与依赖约束的重要性。 - 个人项目使用和集成
在单体应用中提前预防架构腐化。 - 企业级应用开发
在大型团队协作中作为架构治理的自动化防线。
四、安装教程
系统要求
| 工具 | 用途 | 下载/安装方式 |
|---|---|---|
| Git | 下载项目代码 | [https://git-scm.com/] |
安装步骤
# 第一步:克隆项目到本地
git clone https://github.com/opensoftwareconsulting/deptrac
# 第二步:进入项目目录
cd deptrac
# 第三步:查看 README 文档
cat README.md建议:直接使用新仓库
https://github.com/deptrac/deptrac并按照其文档安装,以获得最新特性与修复。
常用安装方式(Composer):composer require --dev deptrac/deptrac
五、使用示例
假设项目结构:
Controller层:App\ControllerService层:App\ServiceRepository层:App\Repository
规则要求:Controller → Service → Repository,禁止 Controller 直接依赖 Repository。
.deptrac.yml 示例:
layers:
- name: Controller
collectors:
- type: className
regex: ^App\\Controller\\.*
- name: Service
collectors:
- type: className
regex: ^App\\Service\\.*
- name: Repository
collectors:
- type: className
regex: ^App\\Repository\\.*
ruleset:
Controller:
- Service
Service:
- Repository运行分析:
vendor/bin/deptrac analyze输出示例:
Violations:
App\Controller\UserController -> App\Repository\UserRepository (Layer: Controller -> Repository not allowed)六、常见问题
| 问题描述 | 解决方案 |
|---|---|
| 找不到新版本特性 | 切换到官方新仓库 deptrac/deptrac |
| 规则不生效 | 检查正则表达式与命名空间是否匹配 |
| 大型项目分析慢 | 使用 --cache-dir 开启缓存,减少重复计算 |
七、总结
Deptrac 用简单的配置与清晰的报告,让 PHP 项目的架构依赖管理从“人为约定”变为“自动执行”。它特别适合在持续集成环节拦截破坏分层的代码提交,从源头保证系统可维护性。虽然原仓库已归档,但新仓库延续了其理念与功能,仍是 PHP 架构治理的实用利器。对于注重代码质量的团队与个人,Deptrac 值得纳入日常开发工具链。
I use Deptrac in development with a watch script. Every time I save a file, it runs analysis on that file and shows violations instantly. Catching bad dependencies at authoring time is way better than waiting for CI.
第一次用的时候有点懵,不知道怎么写正则匹配多级命名空间。后来发现可以用`*`通配符,比如`App\\Module\\*\\Controller\\*`,比正则简单多了。文章里可以补充一下这个技巧。
对于开源项目,在PR里自动跑Deptrac是个好习惯。我们配置了GitHub Actions,每次PR都会生成依赖分析报告,贡献者可以直观看到自己的改动有没有破坏架构。
The JSON formatter output is perfect for our custom dashboard. We parse it and display a "architectural health score" per module. Gives visibility to the team and encourages everyone to keep dependencies clean.
用了Deptrac之后,Code Review的焦点从"这里不该直接调DAO"变成了"这里的业务逻辑是否正确"。架构层面的低级错误几乎没有了,审查效率大幅提升。