Skip to content

🏗️ 架构总览

Composer Skills 采用清晰的三层架构,把"领域模型 / 检测安装""SDK 封装""应用工具"严格分层,让每一层都能独立演化、独立测试。

三层架构图

每一层只与相邻下层通信,下层永不反向依赖上层。

各层职责

层级职责包路径
🧱 基础层领域模型、安装检测、共享工具,零业务逻辑耦合pkg/domain pkg/detector pkg/installer pkg/composerutils
🔌 SDK 层封装两类外部系统:本地 Composer CLI 与远程 Packagist APIpkg/composer pkg/client pkg/repository
🖥️ 应用层面向终端用户的 CLI 与面向开发者的文档cmd/composer-skills docs/

包路径表

路径作用
领域模型github.com/scagogogo/composer-skills/pkg/domain数据结构定义,被 SDK 层共享
检测器github.com/scagogogo/composer-skills/pkg/detector跨 OS 检测 composer 是否已安装
安装器github.com/scagogogo/composer-skills/pkg/installer自动安装 Composer + PHP
共享工具github.com/scagogogo/composer-skills/pkg/composerutils文件系统、HTTP、Mock 辅助
Composer SDKgithub.com/scagogogo/composer-skills/pkg/composer234 个方法封装 composer CLI
Packagist 客户端github.com/scagogogo/composer-skills/pkg/client20 个方法访问 Packagist REST
仓库层github.com/scagogogo/composer-skills/pkg/repository仓库操作,依赖 domain
CLI 工具github.com/scagogogo/composer-skills/cmd/composer-skillsCobra 命令行入口

🎯 设计目标

  • 可扩展 📈 — 每加一个 Composer 子命令只需在 pkg/composer 加一个方法;新 API 端点加在 pkg/client,互不干扰。Options 允许注入自定义 Detector/Installer/CommandExecutor
  • 可测试 🧪 — Mock 机制贯穿基础层与 SDK 层(testMode + SetupMockOutput + MockCommandExecutor),586 个测试用例无需真实 Composer / PHP / 网络即可运行。
  • 类型安全 ✅ — 方法返回结构化类型(AuditInfoOutdatedInfoVersionInfo),告别 strings.Split 解析字符串输出。
  • 零配置 📦 — AutoInstall: true 默认开启,缺 Composer 时自动安装。

🚀 为什么这样分层

把 CLI 封装(pkg/composer)与 API 客户端(pkg/client)拆成两套独立 SDK,源于两者部署依赖不同:前者需要本机有 PHP + Composer,后者是纯 Go、零外部依赖。分层后用户可只引入需要的部分,CI 中跑 Packagist 查询的服务器无需安装 PHP。

阅读顺序

建议先看 分层架构,再看 包依赖关系,最后看 可测试性设计

基于 MIT 许可证发布