Files
cmbone/docs/04-architecture.md
T

3.0 KiB
Raw Blame History

架构设计

总览

main.go
  ├─ Wails application
  ├─ embedded frontend/dist
  ├─ embedded frontend/src/locales/*.json
  └─ services
       ├─ AppService
       ├─ AppConfigService
       ├─ HotkeyService
       ├─ SystemInfo
       └─ OCRService

frontend/src
  ├─ router
  ├─ components
  ├─ pages
  ├─ utils
  └─ locales

前端通过 frontend/bindings 调用 Wails 暴露的 Go 服务。后端服务访问本地 SQLite、平台热键和系统能力。

后端边界

  • main.go:只负责应用组装、资源嵌入、服务注册和启动。
  • internal/models/:定义数据库和服务返回的结构体。
  • internal/services/store.go:负责 SQLite 连接、迁移和基础读写。
  • internal/services/appservice.go:负责窗口、托盘、语言资源和应用生命周期。
  • internal/services/appconfig_service.go:负责配置读写的 Wails 服务边界。
  • internal/services/hotkey_service.go:负责热键读取、更新和重新注册。
  • internal/services/ocr_service.go:负责 OCR 服务入口。
  • platform/:隔离 Windows / macOS 热键和系统能力差异。

服务之间不要互相绕过边界直接操作平台实现。新增平台能力时,优先放在 platform/,再由 internal/services/ 暴露稳定方法。

前端边界

  • frontend/src/router/index.ts:只维护页面路由。
  • frontend/src/components/Main/Index.vue:主窗口布局入口。
  • frontend/src/components/Setting/:设置项和通用设置控件。
  • frontend/src/components/Shortcut/:快捷键设置。
  • frontend/src/pages/Home/Index.vue:第二窗口 / OCR 页面。
  • frontend/src/utils/:国际化、主题、OS 和热键工具函数。
  • frontend/bindings/:由 Wails 生成或按 Wails 合约维护,不写业务逻辑。

数据模型

SQLite 数据库位于用户配置目录下的 cmbone/cmbone.db,不进入 git。

当前核心表:

hotkeys(
  id INTEGER PRIMARY KEY,
  keycode INTEGER,
  modifiers INTEGER,
  description TEXT,
  target TEXT
)
appconfig(
  id INTEGER PRIMARY KEY,
  key TEXT,
  type TEXT,
  value TEXT,
  description TEXT,
  state INTEGER
)

迁移要求:

  • 初始化必须幂等。
  • 新字段必须有默认值或迁移逻辑。
  • schema 变化必须同步 store_test.go、api.md 和 current-state.md。

窗口与事件

  • 主窗口路由:/#/
  • 第二窗口路由:/#/second
  • 托盘菜单由 AppService 配置。
  • 热键触发目标当前包含打开第二窗口。

窗口策略应保持简单:主窗口负责配置和信息,第二窗口负责轻量快捷功能。不要把长期复杂流程塞入第二窗口。

关键风险

  • Wails v3 仍是 alpha,CLI、Go 模块和 runtime 必须保持匹配。
  • bindings 若与 Go 服务签名不一致,前端会在运行时失败。
  • OCR 和热键依赖平台能力,跨平台修改必须分别验证。
  • Vite 构建可能出现 chunk size warning,警告不等于失败,但需要避免无节制增加前端体积。