# Factory / Registry / Adapter 初始化流程改造方案

## 目标

这次改造只做三件事：

1. 简化 `factory`，让它只负责编排，不再关心过多介质细节。
2. 统一 handler 初始化流程，让 `jsonl` / `db` / `api` 三类路径走同一套装配逻辑。
3. 让适配层尽量极简：适配层只补充少量 handler / datasource 实现，不再复制初始化流程。

## 当前问题

### 1. `factory` 里存在大量按类型分支的重复逻辑

当前 [sync_state_machine/pipeline/factory.py](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 组装

## 不在本次范围内

以下内容先不动，只在文档中记为后续方向：

1. 显式 bootstrap 内建 domain 与适配层 domain 的注册时机
2. 用更强的 `EndpointConfig` / `DataSourceDriver` 抽象进一步收敛 factory
3. 清理 `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 注册测试仍通过

## 预期结果

改造完成后：

1. `factory` 中关于 datasource / handler 初始化的重复逻辑显著减少。
2. `DomainRegistry` 对编排层只暴露统一 handler 查询方式。
3. handler 配置注入完全统一。
4. 适配层只需：
   - 提供 datasource（如需要）
   - 提供 handler
   - 注册 handler
   - 调用统一 runner

这就是“适配极简”的基础。
