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. LiamZhang LiamZhang

      正则表达式匹配命名空间这块要注意,写不好容易漏掉子目录。文章里的例子比较简单,实际项目中我们的`Controller`层分散在多个模块下,得用更精准的正则。建议配合`@`标签功能使用。

    2. EmmaWatson EmmaWatson

      I was skeptical about static analysis for architecture, but Deptrac proved me wrong. We defined layers for Domain, Application, and Infrastructure, and it caught a ton of accidental dependencies from Domain leaking into Infrastructure. Clean architecture actually enforced.

    3. KevinChen KevinChen

      Deptrac简直是PHP架构治理的神器!以前团队总有人偷懒,Controller直接调Repository,时间长了代码乱成一锅粥。现在CI里强制跑这个检查,违规的MR直接打回,架构边界终于守住了。