Skip to content

ADR-007: 连线职责完全归属画布系统

Status

Accepted

Date

2026-03-25

Context

连线(Edge)同时涉及两个模块:画布系统负责连线的 CRUD 和渲染,数据流需要知道"谁连着谁"来传递上游数据。需要决定连线验证规则(特别是基于节点类型和内容来源的连接角色规则)归谁管。

Options Considered

方案 A:画布系统管生命周期和结构验证,数据流管业务验证

  • 优点:关注点分离,画布不感知节点类型
  • 缺点:连线创建时需要跨模块调用;画布系统在这个项目中本来就不是类型无关的(注册自定义节点、按类型创建默认数据、节点类型色);拆分验证逻辑增加测试复杂度

方案 B:连线的一切归画布系统,数据流只读取拓扑

  • 优点:所有验证逻辑在一处(flowValidation),同步执行无跨模块依赖;数据流模块职责纯粹(收集数据、映射、合并)
  • 缺点:画布系统需要知道 ContentOrigin 类型

Decision

选择 方案 B

画布系统拥有连线的全部职责:创建、删除、渲染、持久化、所有验证规则(包括基于 ContentOrigin 的连接角色规则)。数据流模块只通过 flowStore 的 edges 读取拓扑关系,不参与连线管理。

核心理由:画布系统在本项目中已经感知节点类型,保持验证逻辑集中比理论上的解耦更实际。

Consequences

正面影响:

  • flowValidation 是唯一的验证入口,测试简单
  • 数据流模块不依赖连线管理,职责清晰

负面影响:

  • 画布系统依赖 ContentOrigin 类型,如果节点类型大量增加,验证规则会膨胀

替代此决策的条件

若节点类型扩展到 10+ 种且连接规则变得复杂(如类型兼容矩阵),重新评估将业务验证抽离为独立模块。