Deptrac - PHP依赖分层检查工具,适用于架构规则验证与代码解耦分析

Deptrac - PHP依赖分层检查工具,适用于架构规则验证与代码解耦分析

在现代 PHP 项目中,随着业务增长,模块与层之间的依赖关系往往会变得混乱,导致代码耦合度高、维护困难。Deptrac 的出现,就是为了让开发者可视化并强制实施架构依赖规则,通过分析类之间的引用关系,发现违反既定分层策略的情况。例如,它可以阻止控制器直接依赖数据持久层,确保系统遵循“上层不越界访问下层”的设计原则。虽然原仓库已迁移至 https://github.com/deptrac/deptrac,但它的核心价值依旧是帮助团队守住架构边界、提升代码可维护性。

项目基本信息

信息项详情
项目名称deptrac
GitHub地址https://github.com/opensoftwareconsulting/deptrac
项目描述暂无描述
作者opensoftwareconsulting
开源协议MIT License
Stars1
Forks0
支持平台Windows / macOS / Linux / Web
最后更新2025-11-18

一、项目介绍

Deptrac(Dependency Tracker)是一个专为 PHP 设计的静态代码分析工具,它的主要任务是根据项目定义的“分层架构规则”,扫描代码库中的类引用关系,并报告所有违反规则的依赖。

核心概念:

  • Layer(层):将代码按职责划分为若干组,例如 Controller、Service、Repository。
  • Rule(规则):定义哪些层可以依赖哪些层,例如 Service 可依赖 Repository,但不可反向依赖。
  • 分析报告:输出违规依赖列表,可生成控制台、JSON、JUnit 等格式,方便集成到 CI。

工作流程:

  1. 解析 PHP 文件生成类依赖图。
  2. 对照 .deptrac.yml 中的分层与规则配置。
  3. 标记所有非法依赖并输出结果。
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\Controller
  • Service 层:App\Service
  • Repository 层: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 值得纳入日常开发工具链。

已有 831 条评论

    1. VictoriaDavis VictoriaDavis

      文章里提到原仓库已迁移,这个信息太重要了。我在网上搜教程的时候看到好多过时的文章,指向旧仓库。希望作者能更新一下新仓库的链接,方便新手。

    2. JackMartinez JackMartinez

      We combined Deptrac with PHPStan. Deptrac handles architectural boundaries, PHPStan catches type errors and logic bugs. Together they form a comprehensive static analysis pipeline that catches issues before code review.

    3. SofiaRodriguez SofiaRodriguez

      自定义collector的功能很强大。我们有个模块需要按注解来划分层,写了一个自定义collector扫描`@DomainModel`注解的类,完美解决了命名空间不统一的问题。

    4. HenryWilson HenryWilson

      The `--fail-on-errors` flag is a must for CI. Without it, violations are just warnings and can be ignored. We set it to fail on any violation, ensuring no architectural debt accumulates over time.

    5. GraceLee GraceLee

      作为架构师,最头疼的就是代码库慢慢腐化。Deptrac让我能提前预警,每周跑一次分析,看看有没有新增的违规依赖。有数据支撑,推动重构的时候底气也足。