# 架构设计 ## 总览 ```text 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。 当前核心表: ```sql hotkeys( id INTEGER PRIMARY KEY, keycode INTEGER, modifiers INTEGER, description TEXT, target TEXT ) ``` ```sql 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,警告不等于失败,但需要避免无节制增加前端体积。