跳到主要内容

核心概念

双世界理论为复杂系统提供了一种不同于传统面向对象的建模方式。它的核心主张是:把系统理解为一个在时间中持续演化的过程,而不是一组在空间中被组织起来的对象。

面向因果

面向因果指的是在建模时,以事件、事实、因果与裁决过程作为系统组织的最小基础。

这与面向对象形成对照:

面向对象面向因果
以对象、类、方法为最小单元以事件、事实、因果、裁决为最小单元
自底向上:先划分对象,再处理时间自顶向下:先定义事实如何形成,再派生表现
状态分散在对象私有空间中状态集中在因果层,感知层只持有投影

面向因果尤其适用于那些需要长期运行、持续交互、不断吸收变化的系统,例如操作系统、3A 游戏、交易系统、在线协作工具。

两层模型

双世界理论把系统拆分为两个相互协作的层次:

因果层

因果层是世界事实的权威来源。它负责:

  • 接收语义事件
  • 根据当前世界做出裁决
  • 产出新的事实
  • 维护可解释的历史

它面对的是 order_submittedpayment_confirmedattack_requested 这样的业务语义,而不是按钮、鼠标、页面控件这些外观。

因果层的核心机制是 FtF_t,也称为解释函数裁决机制。它回答的问题是:新事件如何被纳入已有世界,并转化为新的事实结构。

World(t+1)=Ft(World(t),Event)World(t+1) = F_t(World(t), Event)

其中:

  • WorldWorld 是系统在时刻 tt 的世界状态,由事实与因果结构共同构成
  • EventEvent 是进入系统的新变化
  • FtF_t 是时刻 tt 的解释规则

感知层

感知层是世界事实的响应式投影。它负责:

  • 消费事实并形成投影
  • 检测外部变化
  • 把外部变化整理成语义事件送回因果层
  • 组织连续表现、局部反馈和用户体验

感知层可以有自己的局部状态,例如页面展开、动画进度、通知是否已读、摄像机补间,但这些状态本身不构成世界事实。

两层的关系

外部输入 → 感知层检测 → 翻译成语义事件 → 因果层裁决 → 产生新事实 → 感知层消费事实 → 呈现给外部

感知层不直接改写世界事实,只能通过语义事件请求因果层裁决;因果层不直接处理表现,只发布事实供感知层订阅。

最终因果一致性

任何需要形成稳定世界的过程,都不能允许事实长期悬而不决。

因果层一旦做出裁决,系统就在有限时间内收敛到该裁决所确定的事实版本。这就是最终因果一致性。它强调:

  • 呈现可以滞后
  • 感知可以插值
  • 局部可以暂时不一致

但在有限时间内,所有参与者最终必须面对同一个事实版本。

判断该放哪一层

最实用的判断方式只有一个问题:

这件事一旦变化,会不会影响以后的世界事实?

如果会,它就属于因果层;如果不会,它就留在感知层。

范围感知层可自治必须进入因果层
视觉表现动画、粒子、镜头、UI 过渡
局部反馈Hover、按下反馈、拖拽预览确认、释放、真正生效时
连续物理局部碰撞反馈、轨迹插值命中、落地、进入区域
空间感知检测候选碰撞、候选目标命中确认、目标切换确认
行为决策攻击、技能、受击、死亡、切状态

Headless 与 AI 友好

整个项目应该围绕因果层构建一个最小逻辑视图。通过 Headless 模式运行项目,可以天然地对 AI 和自动化测试友好:

  • 因果层可以在没有渲染、没有 UI 的情况下独立运行
  • 测试可以直接向因果层输入事件,验证事实输出
  • AI 代理可以通过语义事件与世界交互,而不需要模拟鼠标键盘

与其他概念的关系

  • 因果层不等同于 Event Sourcing:Event Sourcing 的前提是事件已经是事实,但因果层的任务是把无序、冲突、不可直接信任的外部变化解释为可追溯的事实。
  • 感知层不等同于 MVC 的 View:View 通常是被动的,而感知层还负责检测输入、切割事件、组织连续反馈,在不影响世界事实的情况下可以连续自治。
  • 最终因果一致性不是瞬时强一致:它允许滞后和局部不一致,但要求最终收敛到单一可叙述的事实版本,类似于分布式中的最终一致性。

相关阅读

  • 双世界理论:从熵增、秩序与可解释性角度深入论证两层模型的哲学基础。
  • 游戏架构实践:两层模型在游戏引擎中的工程落地。