a4902bb730
需求与文档: - R-013 策略自定义字段配置(定义随策略 configSchema 存 settings、值落 strategy_holdings.values JSON、类型化文本/数字/布尔/枚举)定稿并进入 PLAN-012 / 迭代 11(含目标数据模型 + 端到端示例 + 技术方案 + 验收标准) - R-011(Tab设置)/ R-012(UI主题适配)归档至 已完成/,索引标记已归档 - 沉淀约束: 产品约束-010 / 技术约束-015 / 技术约束-016 / UI约束-005 结构重构(技术约束-016): - src/component/ 平铺还原为语义分域目录: data-source/ storage/ position/ market/ trades/(git rename 保留历史) - 清理死代码: 删除 AllocationStorage.js(0 引用)、DataStore setDataset/removeDataset(无调用方) - 同步更新 src/index.js / scripts/*.mjs / tsdown.config.ts 引用 - typecheck + build + test-r009 回归 14/14 通过
67 lines
4.2 KiB
Markdown
67 lines
4.2 KiB
Markdown
# 程序结构设计: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 API(webServer /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/removeDataset(PositionManager 适配单票生命周期后无调用方);
|
||
3. **构建与脚本同步**:tsdown.config.ts entry 更新为新目录 glob;scripts/*.mjs 导入路径更新;
|
||
4. **验证**:typecheck + build 通过;test-r009 回归 14/14 通过(独立数据目录)。
|
||
|
||
## 归类规则(沉淀为技术约束-016)
|
||
|
||
- 服务端代码禁止平铺,按功能域分目录:data-source / storage / position / market / trades;
|
||
- api/ 按领域拆子文件;client/ 仅放 UI(views/ 组件 + 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 # 回归脚本(独立数据目录)
|
||
```
|