← 返回文章列表

一套白板如何承载五种学科语义:Subject Object 平台的合同

TeachFlow 如何用 canonical 对象、动作合同和学科渲染器统一几何、受力图、函数、英语句子与化学方程,而不抹平学科差异。

返回 TeachFlow 项目总览

如果白板对象只有 x/y/width/height,几何体、受力图、函数图、英语句子和化学方程都会退化成“可拖动图片”。画面可以显示,系统却无法验证原子守恒、向量平衡、函数定义域或句法关系,也无法把课堂对象安全沉淀为课程内容。

TeachFlow 的 Subject Object 平台保留共享外壳,但让每个学科拥有自己的 canonical payload、动作与拒绝规则。

共享的是生命周期,不是学科真相

所有对象共享稳定 ID、类型、schema 版本、来源、revision 和白板布局;创建、预览、提交、撤销、导入课程也使用相同流程。真正的学科语义仍由各自模块负责:立体几何保存顶点、边、面与拓扑,受力图保存向量与受力主体,函数对象保存表达式和视窗,英语句子保存 token 与句法标注,化学方程保存公式 AST 和配平结果。

函数对象在桌面工作台中经历输入、预览与提交

动作先预览,再提交

旋转几何体、修改函数窗口、移动受力箭头或配平化学式都不是任意 JSON Patch。动作进入学科 handler,检查作用对象、参数预算和当前 revision;预览返回候选与解释,教师确认后才形成下一版本。

这种设计使“同一个白板”可以复用交互框架,同时拒绝用一个万能模型解释所有学科规则。

课程与课堂之间只做单向、显式迁移

冻结课程块可以导入为课堂对象,并保留课程 revision 与来源快照;课堂修改不会反向改写已发布课程。教师若要复用课堂成果,需要显式 materialize 新 revision。兼容旧对象时,适配器负责迁移,不让历史记录静默改变语义。

一个万能 JSON 对象为什么会失败

假设平台只规定 {type, payload},然后把 payload 完全交给模型。函数对象可能把定义域放在字符串里,受力图可能只有箭头坐标而没有受力主体,化学方程可能显示为已配平却不满足原子守恒。它们在画布上都能“看起来正常”,但无法被后续动作、任务和课程发布可靠消费。

Canonical 合同要求每类对象先把领域不变量变成机器可检查的结构。共享 registry 只负责找到对应 schema、renderer 和 action handler;它不能替学科模块判断一个几何拓扑或化学公式是否成立。这一边界防止了“为了平台统一而抹平领域真相”。

设计取舍:为什么不直接为每个学科做一套独立白板

完全独立可以减少早期抽象,却会重复身份、Session、revision、预览—确认、撤销、来源和课程沉淀。TeachFlow 把这些稳定横切能力收敛到平台,把计算内核和拒绝规则留在学科模块。判断抽象是否合理的标准不是文件数量,而是新增学科时能否复用治理路径,同时仍保留自己的不可变条件。

当前实现列出的五类语义只是已落地范围,不是平台“天然支持任意学科”。新增统计图、证明过程或音乐符号仍需新的 canonical schema、动作合同、渲染器和专项评测。

当前边界

当前源码含立体几何、几何手绘、受力图、函数、英语句子和化学方程实现,并有各自合同检查与 UI 检查脚本。本文未重新执行全部学科检查,因此为 partial;跨学科组合的教学效果、无障碍表达和真实教师可用性仍需独立评估。

结论

Subject Object 平台的价值不在于把所有学科变成一种数据,而是把版本、来源和动作治理做成共性,把不可互换的学科真相留给确定性合同。

← 返回文章列表