Files
kyugao 6f74ed4a79 docs(结构约束同步): 活动文档路径对齐新目录结构
归类重构(技术约束-016)落地后同步活动文档旧路径:
- 数据存储设计.md: 三处对应实现表 12 处 src/component/* → storage/position/market/trades
- R-013 / PLAN-012 / 迭代11技术实现方案: SqliteStore/PositionManager 路径更新
- 迭代11程序结构设计: 补后续动作记录(历史档案按追加式原则不改写)
2026-09-02 15:43:26 +08:00

76 lines
4.9 KiB
Markdown
Raw Permalink 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.
# 程序结构设计:11-策略自定义字段配置(含结构归类优化)
> 迭代编号:11 | 2026-09-02 | 依据:技术约束-016(目录归类)、R-013、PLAN-012
## 背景:结构审查发现与优化
2026-09-02 结构审查发现:src/component/ 平铺 10 个服务端模块,偏离迭代 01/02 程序结构设计的语义分域(data-source/、position/、storage/);`component` 命名语义含混(UI 组件实际在 client/views/);归类演进无文档记录;存在死代码。
## 优化动作(2026-09-02 落地)
1. **归类还原**component/ 平铺 → 按功能域分目录:
```
src/
├── index.js # 插件入口(组装各模块)
├── settings.js # 设置管理(策略 + tabs + QMT 连接配置)
├── api/ # 服务端 HTTP APIwebServer /odl/api/*),按领域拆子文件
│ ├── index.js # 路由入口(合并各领域 + 405/404/500
│ ├── common.js # 公共工具
│ ├── positions.js # 持仓域
│ ├── strategies.js # 策略/份额/tabs 域
│ ├── qmt-connections.js # QMT 连接配置域
│ ├── market.js # 行情域
│ └── trades.js # 交易记录域
├── data-source/ # 数据源抽象层(技术约束-001/003)
│ ├── QmtBridgeRestDataSource.js # QMT Bridge REST 适配器
│ ├── data-source-types.js # 统一数据模型(Position/DataSource 接口)
│ └── QmtHealthMonitor.js # QMT 连接健康检查(数据源健康缓存)
├── storage/ # 存储层(R-008 SQLite
│ ├── SqliteStore.js # SQLite 存储封装(node:sqlite
│ └── DataStore.js # 存储门面(对外兼容 API + 迁移)
├── position/ # 分仓业务逻辑
│ └── PositionManager.js # 持仓↔策略份额分配、聚合视图
├── market/ # 行情域
│ ├── MarketDataHub.js # 行情缓存(内存 + 落盘 + 查询)
│ └── MarketFeed.js # 行情获取(WS + REST 轮询 + prime
├── trades/ # 交易域
│ └── TradeSync.js # 交易记录定时同步(QMT → SQLite)
└── client/ # 客户端(UI)
├── index.js # 客户端入口:tab/settings 注册
├── market/ # MarketDataProvider.jsx(行情 context
└── views/ # React 组件(StrategyTab / SettingsSection / Toast 等)
```
2. **死代码清理**:删除 src/component/AllocationStorage.js(旧 allocations.json 存储,0 引用);删除 DataStore.setDataset/removeDatasetPositionManager 适配单票生命周期后无调用方);
3. **构建与脚本同步**tsdown.config.ts entry 更新为新目录 globscripts/*.mjs 导入路径更新;
4. **验证**typecheck + build 通过;test-r009 回归 14/14 通过(独立数据目录)。
## 归类规则(沉淀为技术约束-016)
- 服务端代码禁止平铺,按功能域分目录:data-source / storage / position / market / trades
- api/ 按领域拆子文件;client/ 仅放 UIviews/ 组件 + market/ provider);
- 文件命名 = 类名 PascalCase + .js/.jsx
- 新增服务端模块必须先落对应域目录,无合适域时先讨论补域,不得回退平铺。
## R-013 新增改动落点(本迭代实施)
```
src/settings.js # +configSchema(策略 schema 扩展)
src/storage/SqliteStore.js # +_ensureHoldingValuesColumn + readValues/writeValues
src/position/PositionManager.js # +updateHoldingValues(按 configSchema 校验)
src/api/strategies.js # +holdings/values-update 端点;strategy-positions 附加 values
src/client/views/SettingsSection.jsx # 「策略分组」策略行展开配置字段
src/client/views/StrategyTab.jsx # 持仓行展开区「自定义字段」编辑
scripts/test-r013-custom-fields.mjs # 回归脚本(独立数据目录)
```
## 后续动作(2026-09-02 结构约束对齐)
归类重构落地后,将活动文档中的旧路径引用同步到新结构(历史档案按追加式原则不改写):
- docs/03-设计约束/数据存储设计.md:三处「对应实现」表 12 处 src/component/* → 新域目录(storage/position/market/trades);
- docs/05-需求池/R-013.md:涉及改动面 SqliteStore → src/storage/
- docs/02-计划/计划-策略自定义字段配置.md:文件树 → storage/SqliteStore.js
- 本迭代技术实现方案:1.2 节标题路径 + §2 PositionManager 路径标注 → 新目录;
- 保留不改:迭代 04 说明/复盘、R-008 归档、旧计划中的 component/ 描述(历史事实)。