FinBuddy 服务层按业务域拆分子包
· FinBuddy
今日进展
- services/ 拆分为 7 个业务域子包:agent、backtest、knowledge、market、report、system、watchlist
- data/middleware/ 拆分为 5 个业务域子包:business、market、news、tdx、watch
- 删除 services 下已迁移到子包的旧文件,删除 engines/adapters/agent_adapter.py(已迁移)
- 新增合规文档、集成文档、中间件拆分方案文档
关键代码/伪代码
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 记录本次重构