2c09c61165
将target_project_ids替换为更通用的data_id_filter
3.9 KiB
3.9 KiB
Factory / Registry / Adapter 初始化流程改造方案
目标
这次改造只做三件事:
- 简化
factory,让它只负责编排,不再关心过多介质细节。 - 统一 handler 初始化流程,让
jsonl/db/api三类路径走同一套装配逻辑。 - 让适配层尽量极简:适配层只补充少量 handler / datasource 实现,不再复制初始化流程。
当前问题
1. factory 里存在大量按类型分支的重复逻辑
当前 sync_state_machine/pipeline/factory.py 同时负责:
- 创建 local / remote datasource
- 判断 datasource 类型
- 选择不同 handler getter
- 注入一部分 handler 配置
- 注册 handler
这些逻辑对 local / remote 各写了一遍,重复明显。
2. DomainRegistry 暴露了过多介质细节
当前 registry 暴露:
get_jsonl_handler()get_db_handler()get_api_handler()
这导致编排层必须知道 handler 是哪一类,从而在 factory 里出现大量 if isinstance(...)。
3. handler 配置注入不统一
目前只有 API handler 在 factory 里显式吃到了 handler_configs。
api:支持 per-side 配置db:当前没有统一注入入口jsonl:当前也没有统一注入入口
这使得“同一类 datasource,两侧配置不同”只能在部分路径下工作。
4. 适配层初始化成本偏高
如果适配层要补充一种 handler,目前需要理解:
- factory 的类型分支
- registry 的不同 getter
- 某些配置为什么只在 API 生效
这和“适配层极简”的目标不一致。
本次改造范围
本次只做最小闭环改造,不碰更大的业务逻辑:
Step 1. 统一 DomainRegistry 的 handler 查询接口
状态:已完成
新增统一接口:
get_handler(node_type, datasource_type)
保留旧接口作为兼容壳,但 factory 新逻辑只使用统一接口。
Step 2. 给所有 handler 基类增加统一配置注入入口
状态:已完成
新增统一入口:
set_handler_config(config)
这样 jsonl / db / api 三类 handler 都可以在实例化后走同一套配置注入流程。
Step 3. 重写 factory 的 datasource / handler 初始化流程
状态:已完成
把当前分散的:
_create_datasources()_register_handlers()_api_handler_kwargs()
收敛成按 endpoint 的统一初始化流程:
- endpoint 创建 datasource
- endpoint 根据 datasource type 向 registry 查询 handler class
- endpoint 创建 handler
- endpoint 统一注入:
handler_config- datasource-specific runtime object(如 api client)
最终让 factory 只负责:
- persistence 初始化
- endpoint 初始化
- strategy 初始化
- pipeline 组装
不在本次范围内
以下内容先不动,只在文档中记为后续方向:
- 显式 bootstrap 内建 domain 与适配层 domain 的注册时机
- 用更强的
EndpointConfig/DataSourceDriver抽象进一步收敛 factory - 清理
NodeHandlerRegistry这类历史遗留接口
测试策略
每一步都补对应 pytest,并保证通过:
Step 1 测试
- registry 可以通过统一接口拿到对应 handler class
- 旧接口仍可兼容使用
Step 2 测试
- handler 可以收到统一的
handler_config - 同一 datasource 类型在 local / remote 两侧可以拿到不同配置
Step 3 测试
- factory 不再依赖
get_jsonl_handler/get_db_handler/get_api_handler - 统一 endpoint 初始化路径可正常创建并注册 handler
- 原有 db handler 注册测试仍通过
预期结果
改造完成后:
factory中关于 datasource / handler 初始化的重复逻辑显著减少。DomainRegistry对编排层只暴露统一 handler 查询方式。- handler 配置注入完全统一。
- 适配层只需:
- 提供 datasource(如需要)
- 提供 handler
- 注册 handler
- 调用统一 runner
这就是“适配极简”的基础。