docs: add harness coding documentation
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# 架构设计
|
||||
|
||||
## 总览
|
||||
|
||||
```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,警告不等于失败,但需要避免无节制增加前端体积。
|
||||
Reference in New Issue
Block a user