FinBuddy 服务层按业务域拆分子包

· FinBuddy

今日进展

  1. services/ 拆分为 7 个业务域子包:agent、backtest、knowledge、market、report、system、watchlist
  2. data/middleware/ 拆分为 5 个业务域子包:business、market、news、tdx、watch
  3. 删除 services 下已迁移到子包的旧文件,删除 engines/adapters/agent_adapter.py(已迁移)
  4. 新增合规文档、集成文档、中间件拆分方案文档

关键代码/伪代码

services 拆分前 vs 后

# 拆分前: services/ 扁平堆放 15+ 个文件
# 问题:文件越来越多,找代码靠搜索,改一个 service 不知道影响谁
services/
  agent_service.py
  backtest_service.py
  knowledge_service.py
  market_service.py
  report_service.py
  simulation_service.py  # 刚从 routes 抽取
  deep_research_service.py
  system_service.py
  watchlist_service.py
  ... (越加越多)

# 拆分后: 按业务域划分子包,每个子包内聚
# 查找代码:先找业务域,再找具体 service
services/
  agent/          # AI Agent 相关服务(意图解析、Swarm 编排)
  backtest/       # 回测相关服务(策略执行、结果分析)
  knowledge/      # 知识库相关服务(向量检索、笔记管理)
  market/         # 行情相关服务(K线查询、资金流向)
  report/         # 报告相关服务(研报生成、PDF 导出)
  system/         # 系统管理服务(配置、日志、公共依赖)
  watchlist/      # 自选股服务(增删改查、分组管理)

middleware 拆分

# 拆分前: data/middleware.py 单文件 800+ 行
# 问题:所有数据库操作堆在一个文件里,改行情查询可能影响业务操作
# 拆分后: data/middleware/ 按业务域子包
middleware/
  business/   # 业务数据库操作 (finbuddy.db)
              # 用户配置、自选股分组、专家定义
  market/     # 行情数据库操作 (finbuddy_market.db)
              # K线数据、财务指标、板块行情
  news/       # 新闻数据操作
              # 新闻抓取、情感分析结果
  tdx/        # 通达信数据操作
              # TDX 连接管理、K线缓存刷新
  watch/      # 自选股数据操作
              # 自选股列表、实时行情推送

# 每个子包的 __init__.py 导出该域的中间件类
# 外部导入不变: from finbuddy.data.middleware import get_middleware
# get_middleware() 返回聚合中间件,内部按域分发

遇到的问题

  • 拆分时循环依赖问题:agent_service 引用 market_service,market_service 又引用 agent_service。解决方案:抽取公共依赖到 system/ 子包
  • middleware 单文件 800+ 行,拆分时需要仔细梳理每个方法属于哪个业务域,有些方法跨域调用需要通过 get_middleware() 统一入口
  • SVN 提交时遇到树冲突(logs 目录),需要先 svn resolve 再提交

明日计划

  • 修复通达信连接时 K 线无增量更新的问题
  • 新增 verify-execution-evidence 技能
  • 更新 HISTORY.md 记录本次重构