3.0 KiB
3.0 KiB
架构设计
总览
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,警告不等于失败,但需要避免无节制增加前端体积。