Private
Public Access
1
0
Files
u-desk/docs/04-功能迭代/GO-DESK-9.插件系统/设计文档/复杂度与价值评估.md

4.3 KiB
Raw Blame History

复杂度与价值评估

评估时间Phase 0 实施完成后2026-05-03 评估范围:已实施的 Phase 0 + 远景 Phase 1~5


一、Phase 0 已投入的复杂度

1.1 新增代码量

文件 行数 职责
internal/plugin/plugin.go ~150 核心接口与类型定义
internal/plugin/adapter.go ~48 CoreServices 适配器
internal/plugin/tab_registry.go ~98 Tab 注册表(线程安全)
internal/plugin/preview_registry.go ~80 预览注册表(线程安全)
internal/plugin/manager.go ~196 插件管理器(生命周期)
frontend/src/plugin/types.ts ~70 TS 类型定义
frontend/src/plugin/registry.ts ~112 前端注册中心Vue reactive
app.go 改动 ~40 集成 PluginManager + 2 个绑定方法
合计 ~794

1.2 架构复杂度增量

维度 具体表现 严重程度 已解决方式
Wails v3 方法泄露 App struct 上所有导出方法自动暴露给前端 adapter 模式隔离CoreServices 独立实现ADR-001
Vue 3 响应式陷阱 Map/Setreactive() 内不触发更新 使用 Record<string, T> 替代 Map已踩坑记录
并发安全 Manager 多处读写共享状态 全量 RWMutex 保护 + copy-then-iterate 模式
两阶段回滚 Register 时 Tab 成功但 Preview 失败需清理 tabRegistered 标志位 + Unregister() 回滚
前后端类型桥接 Go struct → map[string]interface{} → TS json.Marshal round-trip 统一处理

1.3 运行时开销

开销项 数值 说明
启动时内存 ~0仅创建 Manager 和空 Registry Phase 0 不注册任何插件
锁竞争 Phase 0 无并发注册场景) 为后续并发预留
方法调用链路 App → pluginMgr → Registry 多一层间接调用,可忽略

二、Phase 0 获得的价值

2.1 直接收益

收益点 说明 对应痛点
扩展骨架就绪 注册表、管理器、适配器全部可用 app.go God Object
新功能零侵入 未来新增预览格式 / Tab 页无需改 App.vue 硬编码映射、v-if 链
懒启动支持 Tab 插件按 Start() 按需激活 安装包膨胀、启动慢
优先级调度 预览处理器按 priority 排序匹配 无法控制预览顺序
内置/外置统一接口 同一套 Plugin 接口服务两类插件 两套逻辑
失败自动清理 Register 部分失败时回滚已注册资源 残留脏状态

2.2 战略价值

价值维度 说明
可演进性 从单体应用平滑过渡到平台型应用,每步可独立验证
文档资产 完整设计文档 + ADR + 接口定义 + 数据模型,新人可快速接手
技术债务清零 解决了 app.go 35+ 方法的 God Object 问题根源(不再往 App 加方法)
市场基础 Phase 0 的接口体系直接支撑 Phase 4~5 的外部插件和插件市场

三、远期复杂度预警Phase 3~5

Phase 主要复杂度来源 风险等级 缓解策略
Phase 3 UI Slot 动态注入 9 个插槽的组件动态加载、生命周期协调、布局冲突 先做 2~3 个核心插槽验证,不全量铺开
Phase 4 外部插件加载 .uplugin 包解析、沙箱隔离、版本兼容、签名校验 参考 VS Code Extension Host 架构,独立进程运行
Phase 5 插件市场 服务端 API、审核流程、支付、权限管理 极高 作为独立项目推进,不影响桌面端主迭代

四、总体评价

投入:   ~800 行代码 + 6 个新文件 + 1 个文件改动
回报:   扩展能力从 0 → 完整骨架,后续每步增量开发
风险:   Phase 0 本身风险已全部识别并解决
ROI:    ★★★★☆ — 当前阶段性价比极高

结论Phase 0 是一次高 ROI 的基础设施投资。真正的复杂度在 Phase 4外部插件但那是独立里程碑可以单独做 go/no-go 决策。当前阶段建议继续推进 Phase 1Draw.io 验证插件),用真实插件验证骨架的完整性。