Skip to content

核心概念

本文档将帮助你理解 EasyEditor 的基本架构和核心概念,为你的开发工作打下坚实基础。

架构概览

EasyEditor 采用模块化的架构设计,各个模块之间通过清晰的接口进行通信,形成一个灵活且可扩展的低代码引擎系统。核心架构由引擎(Engine)、设计器(Designer)、项目管理(Project)和模拟器(Simulator)四大部分组成,通过插件系统实现功能扩展。

介绍

引擎 (Engine)

引擎是整个系统的核心,负责协调各个模块的工作并管理插件的生命周期。它提供了统一的事件系统和状态管理能力,是连接各个模块的枢纽。

typescript
import {
  init,
  materials,
  plugins,
  project,
  setters,
} from '@easy-editor/core'
import DashboardPlugin from '@easy-editor/plugin-dashboard'

// 注册插件
plugins.registerPlugins([
  DashboardPlugin({
    group: {
      meta: groupMeta,
      initSchema: {
        componentName: 'Group',
        title: '分组',
        isGroup: true,
      },
    },
  }),
])

// 构建组件元数据
materials.buildComponentMetasMap(Object.values(componentMetaMap))

// 注册设置器
setters.registerSetter(setterMap)

// 初始化引擎
await init({
  designMode: 'design',
  appHelper: {
    utils: {
      // 自定义工具函数
    },
  },
})

引擎提供了各个核心模块的直接访问,如 projectmaterialssetters 等,使开发者能够轻松获取和操作这些模块。具体的 Engine API 可以查看 API 参考 文档。

设计器 (Designer)

设计器负责页面编排和交互,管理用户与界面的交互逻辑。它是用户进行可视化编辑的核心模块,提供了多种能力:

选区管理 (Selection)

  • 负责管理组件的选中状态
  • 提供单选、多选、取消选择等功能
  • 支持通过组件ID或节点实例进行选择

拖拽管理 (Dragon)

  • 处理组件拖拽的全生命周期
  • 支持组件的添加、移动和调整位置
  • 提供拖拽开始、过程中和结束的事件处理

文档操作

  • 获取当前编辑的文档
  • 管理文档的历史记录
  • 导入导出文档数据

设计器通过暴露清晰的方法和属性,使开发者能够轻松控制编辑器的交互行为,如组件选择、拖拽放置、调整大小等核心能力。

项目管理 (Project)

项目管理负责文档和资源的管理,提供了文档的创建、打开、保存和关闭功能,以及导入导出 Schema 的能力。它管理着编辑器中的所有文档实例,是多页面应用设计的核心模块。

项目管理的主要能力包括:

文档管理

  • 创建新的文档实例
  • 打开和切换不同的文档
  • 保存文档更改
  • 关闭不需要的文档

Schema 管理

  • 将项目导出为 Schema 数据结构
  • 从 Schema 数据结构导入项目
  • 支持不同转换阶段的 Schema 处理

资源管理

  • 管理项目中的静态资源
  • 处理资源引用关系
  • 维护资源的元数据

项目管理为多页面、多文档的应用设计提供了强大支持,使开发者可以轻松创建复杂的应用结构。

模拟器 (Simulator)

模拟器提供预览和调试能力,负责组件的渲染和交互。它是连接设计器和渲染器的桥梁,确保用户在设计时可以实时看到效果。

模拟器的主要功能包括:

视口管理

  • 控制画布的大小和比例
  • 支持多种设备尺寸的模拟
  • 提供画布的缩放和平移能力

渲染控制

  • 配置渲染模式(设计态、预览态、运行态)
  • 管理组件的渲染生命周期
  • 处理组件的事件和交互

组件映射

  • 将 Schema 中的组件名映射到实际组件实现
  • 维护组件的实例引用
  • 管理组件的上下文和属性传递

模拟器使开发者能够在设计过程中实时预览效果,大大提高了设计效率和准确性。

插件系统 (Plugin)

插件系统提供了扩展引擎能力的机制,允许开发者添加新功能或修改现有行为。它是 EasyEditor 实现高度可扩展性的关键。

插件的基本结构包括:

  • name:插件名称,必须唯一
  • deps:插件依赖,声明依赖的其他插件
  • init:初始化方法,在插件加载时执行
  • destroy:销毁方法,在插件卸载时执行
  • extend:扩展方法,用于扩展现有模块的功能

插件系统的强大之处在于:

  1. 声明式依赖:插件可以声明其依赖的其他插件,系统会自动处理加载顺序
  2. 上下文共享:插件可以通过上下文对象共享数据和方法
  3. 事件通信:插件可以监听和触发事件,实现松耦合的通信
  4. 功能扩展:插件可以扩展核心模块的功能,如添加新方法或修改现有行为

通过插件系统,EasyEditor 可以根据不同的需求场景进行功能定制,如大屏设计、表单设计等专业场景。

详解

设计器功能

设计器提供了丰富的可视化编辑能力,包括但不限于:

组件拖拽:通过拖拽操作添加、移动组件,支持精确定位和智能辅助线等功能。设计器提供了完整的拖拽生命周期管理,从拖拽开始到结束,开发者可以在不同阶段执行自定义逻辑。

组件选择:支持单选、多选和框选等多种方式选择组件。选中的组件会显示特殊的视觉效果,并可以通过属性面板进行配置。选区管理模块维护了当前选中的组件列表,并提供了丰富的选择操作API。

属性配置:通过属性面板可视化编辑组件的各种属性,如样式、事件处理等。设计器会将属性更改实时应用到组件上,实现所见即所得的编辑体验。

布局调整:支持组件大小调整、对齐、分布等布局操作,帮助用户快速构建整齐的界面。布局系统支持多种布局模式,如流式布局、绝对定位和弹性布局等。

项目管理功能

项目管理负责文档和资源的维护,主要功能包括:

文档管理:创建、打开、保存和关闭文档,支持多文档编辑和切换。每个文档有独立的组件树和历史记录,可以单独导出和导入。

组件管理:维护项目中使用的组件库,包括组件的注册、卸载和更新。组件管理模块确保组件的元数据和实现代码保持同步。

配置管理:管理项目级别的配置,如主题、国际化设置等。这些配置可以影响整个项目的渲染和行为。

历史记录:提供操作的撤销和重做功能,记录用户的编辑历史。历史记录模块使用高效的差异算法,只记录必要的变更信息,确保内存使用合理。

模拟器功能

模拟器提供了预览和调试能力,主要功能包括:

实时预览:将设计中的页面实时渲染,使用户可以立即看到编辑效果。实时预览使用高效的增量更新算法,只更新发生变化的部分,确保预览的性能。

多设备适配:支持模拟不同设备尺寸,预览在不同设备上的显示效果。开发者可以定义自定义设备配置,如手机、平板和桌面等不同尺寸。

事件模拟:支持在设计时模拟运行时的事件,如点击、滚动等,便于调试交互逻辑。事件模拟系统可以记录和重放用户操作,帮助开发者排查交互问题。

状态查看:查看组件的运行状态、数据流向和属性变化,辅助调试。状态检查工具可以实时显示组件的内部状态,帮助开发者理解组件的行为。

工作流程

EasyEditor 的典型工作流程如下:

  1. 初始化编辑器:创建编辑器实例,加载必要的插件和配置
  2. 获取核心模块:获取设计器、项目管理和模拟器等核心模块实例
  3. 创建/加载项目:创建新项目或加载现有项目的 Schema
  4. 编辑设计:通过设计器进行界面设计,添加组件、配置属性等
  5. 预览调试:使用模拟器实时预览和调试设计效果
  6. 导出项目:将完成的设计导出为 Schema 数据,用于保存或发布

整个过程中,编辑器引擎协调各个模块的工作,确保它们之间的数据流转和状态同步,提供流畅的设计体验。

扩展机制

EasyEditor 提供了多种扩展机制,使开发者可以根据需求定制和增强系统功能:

插件扩展

插件是扩展 EasyEditor 功能的主要方式,通过插件可以:

  • 添加新的功能模块,如数据源管理、国际化支持等
  • 修改现有模块的行为,如自定义拖拽逻辑、重写渲染流程等
  • 集成外部系统,如版本控制、团队协作功能等

插件可以访问编辑器的各个核心模块,并通过事件系统与其他插件通信,形成松耦合的架构。

渲染器扩展

渲染器负责将 Schema 转换为实际的用户界面,EasyEditor 支持扩展不同的渲染器实现:

  • 支持不同的前端框架,如 React、Vue 等
  • 针对特定场景定制渲染行为,如大屏渲染、表单渲染等
  • 实现不同的渲染优化策略,如懒加载、虚拟滚动等

渲染器通过统一的接口与编辑器引擎通信,确保不同渲染器实现的一致性和可互操作性。

物料扩展

物料是可视化搭建的基础组件,EasyEditor 支持丰富的物料扩展能力:

  • 注册自定义组件作为物料
  • 定义组件的元数据,如属性、事件、样式等
  • 配置组件的设置器,实现属性的可视化编辑
  • 实现组件的缩略图和预览效果

通过物料扩展,开发者可以将业务组件库接入 EasyEditor,实现业务定制化的低代码平台。

设置器扩展

设置器是编辑组件属性的交互控件,通过设置器扩展可以:

  • 实现复杂属性的可视化编辑,如颜色选择器、富文本编辑器等
  • 定制属性编辑的交互方式,提升用户体验
  • 实现特定业务场景的属性编辑逻辑,如数据绑定、条件配置等

设置器扩展极大地增强了属性编辑的能力,使复杂的配置变得简单直观。

下一步

Released under the MIT License.