Files
cmbone/docs/04-architecture.md
T

98 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 架构设计
## 总览
```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,警告不等于失败,但需要避免无节制增加前端体积。