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

      规则集可以按模块分开配置。我们每个业务模块有自己的`.deptrac.yml`,在CI里并行分析。这样不会因为某个模块的问题阻塞整个项目的构建。

    2. AmeliaAnderson AmeliaAnderson

      集成到GitLab CI的配置很简单。在pipeline里加一步`vendor/bin/deptrac analyze --no-interaction`,然后解析JUnit格式的报告。违规了就让pipeline失败,开发者必须修复才能合并。

    3. BenjaminTaylor BenjaminTaylor

      One hidden gem: Deptrac can detect unused code indirectly. If a class isn't depended on by any allowed layer, it might be dead code. We found several hundred lines of obsolete classes this way.

    4. CharlotteWilson CharlotteWilson

      接手了一个没有分层概念的老项目,Controller里直接写SQL,Service里又处理HTTP请求。用Deptrac扫描了一下,密密麻麻全是违规。虽然不是一下子能改完,但至少有了重构的路线图。

    5. EthanBrown EthanBrown

      We used Deptrac to enforce hexagonal architecture. Layers: Domain, Application, Infrastructure, UI. The ruleset made it impossible to leak infrastructure dependencies into the domain layer. Totally changed how our team thinks about separation of concerns.