# 程序结构设计: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 # 回归脚本(独立数据目录) ``` ## 后续动作(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/ 描述(历史事实)。