Appearance
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+ 种且连接规则变得复杂(如类型兼容矩阵),重新评估将业务验证抽离为独立模块。