diff --git a/docs/实体生命周期引擎实现规范.md b/docs/实体生命周期引擎实现规范.md new file mode 100644 index 0000000..d80b6bf --- /dev/null +++ b/docs/实体生命周期引擎实现规范.md @@ -0,0 +1,68 @@ +# DatAlive 实体生命周期引擎实现规范 (Entity Lifecycle Implementation) + +## 1. 设计理念:引擎驱动生命周期 (Engine-Driven Lifecycle) + +在基于 React 19+ 生态的低代码架构中,由于 Strict Mode、Concurrent Rendering 和 Suspense 的存在,React 组件的真实挂载/卸载行为往往不可预测(例如组件可能被多次挂载/卸载以检查副作用)。 + +因此,DatAlive 平台中的“业务生命周期”**严禁直接等价于 React 的生命周期(如 `useEffect`)**。我们必须采用**引擎驱动**模式:由底层的 `RuntimeEngine` 根据路由状态、全局数据流或用户行为,**显式地派发(Emit)**各个实体的生命周期事件。React 仅仅作为“被动接收状态并渲染”的视图层。 + +在底层 Schema 的定义中,无论是路由跳转、数据请求回调还是用户点击,这一切所谓的“生命周期钩子”,均被统一收口并泛化为 **`Interaction`(泛化事件侦听器)**。 + +--- + +## 2. 实体生命周期映射与 Interaction 触发策略 + +目前设计器中允许配置 `interactions: Interaction[]` 字段的实体,及其引擎侧的触发策略定义如下: + +### 2.1 Application (应用根节点) +负责整个低代码应用启动和全局级别的状态拦截。 + +| Interaction.event (触发器) | 触发时机 | 引擎实现策略 | +| :--- | :--- | :--- | +| `onLaunch` | 应用配置加载完成,准备渲染根节点前 | 在 React `createRoot().render()` 执行前,由引擎主动解析执行。可用于初始化全局变量、鉴权校验等。 | +| `onError` | 全局未捕获的运行时异常(含数据流异常) | 绑定在 React ErrorBoundary 顶层,以及 Zustand / TanStack Query 的全局 Error Handler 中。 | + +### 2.2 Route & Page (路由与页面容器) +视图层的状态闭环单元,处理路由切换带来的副作用(Route Guards)。 + +| Interaction.event (触发器) | 触发时机 | 引擎实现策略 | +| :--- | :--- | :--- | +| `onEnter` (Route级) | 路由准备进入该页面前 (Route Guards) | 挂载在路由监听层。可在此处派发 Action 发起鉴权,若鉴权失败可触发 Redirect Action 踢回登录页。 | +| `onLoad` (Page级) | 页面组件挂载,且前置预热数据已就绪 | 在页面容器初始化时触发。常用于重置当前页面的局部 Variables,或发起非预热的懒加载 Query。 | +| `onLeave` (Route级) | 路由准备离开该页面之前 | 路由切换前触发。用于清理定时器、WebSocket 或清空重型数据变量。 | +| `onResize` (Page级) | (大屏特有) 画布或窗口尺寸发生变化 | 引擎统一在 `window.addEventListener('resize')` 中做防抖处理,然后派发给当前激活的 Page。 | + +### 2.3 Component (视图原子组件) +最核心的用户交互载体,其事件主要由 DOM 交互驱动,少部分由挂载周期驱动。 + +| Interaction.event (触发器) | 触发时机 | 引擎实现策略 | +| :--- | :--- | :--- | +| **交互类**: `onClick`, `onMouseEnter`, `onChange` 等 | 用户与组件进行真实物理交互时 | 通过标准 React Props 传递给具体的组件实现,例如 `