Skip to content

核心数据接口 DriverInterface / IDataDriver 定义存在分裂,导致所有 Driver 插件实现不一致 #958

@hotlong

Description

@hotlong

问题描述

目前 packages/core/src/contracts/data-engine.ts 中定义的 DriverInterfacepackages/spec/src/contracts/data-driver.tsIDataDriver 存在明显分裂。迁移和新开发的数据驱动插件(如 driver-sql、driver-memory)的实现对象和测试标准不一致,导致:

  • 插件实现时不敢只实现 IDataDriver(spec),而是 fallback 到 DriverInterface(core),漏掉协议方法,实际签名不合规。
  • 测试可被 as any 绕过类型不对齐,CI 测不出实现缺口。
  • 文档、代码和测试三分天下,生态长期不可持续。

主要分歧

  • DriverInterface(core)为最小集合,仅有 connect/disconnect + CRUD + bulk(共13方法),无 supports、upsert、stream、事务、schema 管理、explain等高级能力
  • IDataDriver(spec)为基础协议,28方法(含批量、schema、事务、explain、health、dropTable、capabilities、findStream等)
  • 两者都是"权威",但所有驱动实际只实现 core 导致协议缺口大量潜伏

推荐修复方案

  1. 单一权威: 明确以 spec 仓库的 IDataDriver 为唯一强制标准,彻底弃用 core/DriverInterface,所有插件以此为唯一实现合同
  2. 完整对齐: 用 Zod Schema + TS interface 驱动,制定签名类型约束不可落空
  3. 接口整合: 如果有历史兼容诉求,拆为"MinimalDriver"+"SpecDriver",但 CI 和主流插件只测试 SpecDriver
  4. 协议检查工具: CI强制所有插件类型匹配 IDataDriver,否则构建/测试禁止通过
  5. 清理 legacy fallback: 删除 driver-sql/driver-memory 里对旧协议 key 的容错逻辑 (filters/sort/skip etc),全部只认标准 key

优先级与影响

  • 优先级:P0(架构层面红线)
  • 影响范围: 所有 Driver 插件实现、协议文档、核心用例、内核注册机制
  • 影响版本: v3.x/v4.x

期望产出

  • 技术决策:统一标准接口与实现
  • 签名重构 PR
  • 插件/内核/测试/文档同步更新

相关文件:

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions