ADR-0018:统一公共链式构建与声明式表格
状态:已采纳。日期:2026-10-15。
背景
密集 ADR 表单证明了现有组件能表达复杂结构,但调用方必须传递大量位置参数、维护单元格坐标,并在样例中实现最小行高。文档结构难以直接从 Java 源码中辨认。相同单元格按不同顺序声明还会得到不同总高度。
决策
公共编写与配置层使用具名 Builder,嵌套结构使用同步回调,结果保持不可变快照。保留简单构造器、静态工厂和原有入口;不对 IR、绘制指令、异常和 SPI 机械添加 Builder。
语义模型保留 Document.Builder。组件模块提供 Documents.Builder,委托语义构建器并使用自动 ID 工厂添加 ComponentBlock,结果仍是 Document,不产生并行模型,也不引入语义模型到组件层的反向依赖。
GridTable.Builder 从显式行与跨度推导单元格坐标,跳过之前的跨行占用。默认值按行/格取快照,声明错误明确失败。最小高度属于行。布局先测量全部单元格一次,再按跨度、行、列固定顺序满足行高约束,保留输入绘制顺序。连通行组整组分页与超高失败契约保持。
DocumentEngine.Builder 保存默认页模板、导航和注释。export(document).backend(...).options(...).to(...) 复用既有布局、执行上下文、资源所有权与原子写入路径,不建立另一套导出管线。
结果
调用方可以直接表达文档、列、表、行和格,减少坐标维护和位置参数。样式、字体与后端配置可读性统一。链式 API 不新增系统字体回退,不改为后端分页,不隐式获取资源或创建线程。
新增 GridTable/TextComponent record 属性保留旧构造签名,但反射分量改变。固定顺序分配修复会改变旧顺序下过量分配的几何;必须运行既有表格、混合栏、进阶和生产回归,不能以自动刷新视觉基线掩盖差异。
静态勾选辅助仍是样例中的简单水平文字实现,不宣称通用富文本控件或可编辑表单。组件格内部的跨页续排不在本次范围。
后续 ADR-0019 在保留默认整组契约的基础上,增加显式合并格续页与普通列文字自然续页。