Files
one_divine_lot/docs/04-迭代记录/11-策略自定义字段配置/程序结构设计.md
T
kyugao a4902bb730 feat(R-013+重构): 策略自定义字段需求文档 + 结构归类优化
需求与文档:
- 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 通过
2026-09-02 15:38:51 +08:00

4.2 KiB
Raw Blame History

程序结构设计: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 等)
  1. 死代码清理:删除 src/component/AllocationStorage.js(旧 allocations.json 存储,0 引用);删除 DataStore.setDataset/removeDatasetPositionManager 适配单票生命周期后无调用方);
  2. 构建与脚本同步tsdown.config.ts entry 更新为新目录 globscripts/*.mjs 导入路径更新;
  3. 验证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  # 回归脚本(独立数据目录)