🏗️ 架构总览
Composer Skills 采用清晰的三层架构,把"领域模型 / 检测安装""SDK 封装""应用工具"严格分层,让每一层都能独立演化、独立测试。
三层架构图
每一层只与相邻下层通信,下层永不反向依赖上层。
各层职责
| 层级 | 职责 | 包路径 |
|---|---|---|
| 🧱 基础层 | 领域模型、安装检测、共享工具,零业务逻辑耦合 | pkg/domain pkg/detector pkg/installer pkg/composerutils |
| 🔌 SDK 层 | 封装两类外部系统:本地 Composer CLI 与远程 Packagist API | pkg/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 SDK | github.com/scagogogo/composer-skills/pkg/composer | 234 个方法封装 composer CLI |
| Packagist 客户端 | github.com/scagogogo/composer-skills/pkg/client | 20 个方法访问 Packagist REST |
| 仓库层 | github.com/scagogogo/composer-skills/pkg/repository | 仓库操作,依赖 domain |
| CLI 工具 | github.com/scagogogo/composer-skills/cmd/composer-skills | Cobra 命令行入口 |
🎯 设计目标
- 可扩展 📈 — 每加一个 Composer 子命令只需在
pkg/composer加一个方法;新 API 端点加在pkg/client,互不干扰。Options允许注入自定义Detector/Installer/CommandExecutor。 - 可测试 🧪 — Mock 机制贯穿基础层与 SDK 层(
testMode+SetupMockOutput+MockCommandExecutor),586 个测试用例无需真实 Composer / PHP / 网络即可运行。 - 类型安全 ✅ — 方法返回结构化类型(
AuditInfo、OutdatedInfo、VersionInfo),告别strings.Split解析字符串输出。 - 零配置 📦 —
AutoInstall: true默认开启,缺 Composer 时自动安装。
🚀 为什么这样分层
把 CLI 封装(pkg/composer)与 API 客户端(pkg/client)拆成两套独立 SDK,源于两者部署依赖不同:前者需要本机有 PHP + Composer,后者是纯 Go、零外部依赖。分层后用户可只引入需要的部分,CI 中跑 Packagist 查询的服务器无需安装 PHP。