低代码平台前端的设计与实现(二)构建引擎BuildEngine切面处理设计

本文探讨低代码平台的构建引擎BuildEngine在前端设计中的应用,特别是切面处理设计,包括组件构建切面和元素节点解析切面,以支持页面拖拉拽的设计器需求。通过引入切面,实现了RuntimeBuildEngine和DesignBuildEngine,以适应运行时和设计态的不同需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章,我们介绍了如何设计并实现一个轻量级的根据JSON的渲染引擎,通过快速配置一份规范的JSON文本内容,就可以利用该JSON生成一个基础的UI界面。本文我们将回到低开的核心—页面拖拉拽,探讨关于页面拖拉拽的核心设计器Designer的一些基本前置需求,也就是构建引擎BuildEngine切面处理设计。

只要接触过低开平台的朋友都见过这样的场景,在设计器的画布中点击已经拖拉拽好的UI元素,会有一个边框,高亮显示当前的元素,还支持操作:

在上一篇文章我们介绍了创建的整个流程:由一个构建引擎(BuildEngine)通过读取JSON Schema的节点来匹配对应的节点类型来生成UI元素。

为了实现设计器画布选中边框的需求,首先想到的一个解决方案就是仿照BuildEngine做一个类似的DesignerBuildEngine,里面的流程和BuildEngine大致相同,只是在生成最终的ReactNode节点的时候,在其外围使用某个元素进行包裹,具备边框等功能:

// DesignerBuileEngine伪代码
class DesignerBuileEngine { innerBuild() { // 在返回某个ReactNode前,使用一个div包裹 const reactNode = xxx; return createElement( 'div', {  // 边框样式等数据  },  reactNode); }
} 

但是这并不是一个很优雅的设计,因为如果我们衍生出一个新的DesignerRenderEngine,那么我们需要同时维护一个设计态一个云形态两个Engine,尽管他们的处理流程大致相同。

切面设计

组件构建切面处理

为了避免功能代码的冗余,也更方便后续的扩展性。我们考虑采用切面的设计方案。将整个处理流程的某些环节加入切面,以达到灵活处理的目的。切面的实现可以有很多种形式,例如一个回调函数,又或者传入一个对象实例(本质上还是回调)。作为一个轻量级低开模块,我们暂时设计一个简单的函数ComponentBuildAspectHandler(组件构建切面处理器)来进行切面处理。

该切面方法作为BuildEngine的一个实例属性存在,在BuildEngine进行构建的时候,我们切入进行处理:

// 伪代码
class BuildEngin {
// 新增的属性
+ componentBuildAspectHandle: ComponentBuildAspectHand
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值