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

4.9 KiB
Raw Permalink 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  # 回归脚本(独立数据目录)

后续动作(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/ 描述(历史事实)。