低代码页面编辑器的设计和实现

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 低代码编辑器的设计与实践 —— 为“管理台”量身定制的低代码 吕洋 腾讯前端高级工程师
2. 引言 数据 + 想法 低代码平台 用于 “制作管理台” 的 低代码平台 应用
3. 目录 1. 管理台之痛 & 平台的设计
4. 01 低代码平台的设计 「一个管理台的生命周期」
5. 1.1 管理台里有什么 增删改查? 还有一堆逻辑和被忽视的基础功能
6. 1.2 开发和维护管理台的痛苦 框架与组件库? 收集和调研、学习与接入成本、被迫造轮子、使用风险…… 接口和逻辑? 文档与协议、Mock、异步状态处理、错误监控…… 编码质量? 不靠谱的最佳实践、规范、疯狂堆代码、Code Review、重构…… 需求和人力? 快速迭代、方案评审、项目交接…… And More
7. 1.3 低代码 「把重复的细节封装起来,把封不住的变化用代码放开」 做一个 集成方案 低代码? 布局 逻辑 数据 资源编排 样式、内容布局、UI组件等 页面逻辑、工作流、业务模型、 云服务编排、表达能力 数据库、接口、数据关系 服务编排、Serverless、CI/CD
8. 各角色参与度(示意) (使用无极2.0搭建) 通用 █ 固定模板的数据源+页面 ██████████ █ 简单布局调整 ██████████ 极容易触及 “复杂”的边界 █ 定制编辑框、数据展示方式 ██████████ 一不小心,就得让专业开发者接手 █ 简单的业务逻辑 & 联动 ██████████ █ 多数据源 & 复杂联动 ██████████ █ 定制化开发的页面 ██████████ 定制化 无开发经验者 业余开发者 专业开发者
9. 1.4 我们要做什么 为管理台的 生产和维护过程 提效
10. 1.4 我们要做什么 数据库 需求建模 已有的接口 BFF云函数 … 把协议调对! 数据源 数据协议 编辑器编辑 协议辅助生成 在预览区可视化调整 页面配置 设计时 Model 使用调试参数 / Mock / 页面配置 初始化 可视化 编辑+预览 开发 & 发布组件! 发布 XX环境 组件/逻辑 物料库 对应版本的 数据协议、页面配置 页面 访客访问
11. 用户 (包括非前端开发) 能够独立、快速完成页面开发。 页面同时具备 丰富的逻辑和交互
12. 1.5 我们的平台 开发端 (cli) 管理端 (web) 用户端 (web) 数据源 页面引擎 基础框架和Runtime 配置/物料管理 通用中间件 服务和数据托管
13. 1.5 我们的平台 开发端 (cli) 管理端 (web) 用户端 (web) 页面引擎 数据源 基础框架和Runtime 请求器 Schema管理 编辑器 Designer UI库与主题 Layout 数据修剪 接口管理 渲染器 Renderer 菜单 导航 路由 各端 API 插件 统计与日志 全局状态管理 监控 & 统计 插件 组件加载器 配置/物料管理 版本管理 通用中间件 发布与隔离 组件源 通知 审批 权限 流程 服务和数据托管 云函数 (沙箱) 静态资源 数据源网关 日志存储 配置存储
14. 02 页面方案及其实践 「页面片 / 组件 / 运行 / 编辑器 ……」
15. 2.1 一些场景 (1/2) · 朴素的嵌套布局 节点类型、组件属性、组件样式 数据绑定、动态prop、事件回调 需要页面状态
16. 2.1 一些场景 (2/2) · “除了数据,啥都一样” 的 块 常见于列表循环渲染 块的内容和逻辑,可能会越来越复杂? 低代码怎么实现编辑和运行?
17. 2.2 页面片的概念 页面片 (Pagelet) • • • • 物料组件 • • • 子页面片 子页面片 子页面片 子页面片 子页面片
18. 2.2 页面片的概念
19. 2.2 页面片的概念
20. 2.3 页面引擎 数据库 需求建模 已有的接口 BFF云函数 … 把协议调对! 数据源 数据协议 编辑器编辑 协议辅助生成 在预览区可视化调整 页面片配置 设计时 数据Model 使用调试参数 / Mock / 页面配置 初始化 可视化 编辑+预览 开发 & 发布组件! 发布 XX环境 组件/逻辑 物料库 对应版本的 数据协议、页面片配置 页面 访客访问
21. 2.3 页面引擎 数据源 数据协议 设计时 数据Model 页面片配置 可视化 编辑+预览 兼具布局和逻辑 的页面 MV* (Model-View-*) 数据 Model 对应版本的 数据协议、页面片配置 配置描述的 呈现方式 页面
22. 2.3 页面引擎 Designer Renderer 添加数据和接口 协议 Model 设计时 数据Model Context (Bus) 编辑中的 页面片配置 可视化 编辑+预览 组件、逻辑等 : 物料库 公共方法和存储 事件总线 Renderer Model 影响 数据 Model 数据协议、页面片配置 配置描述的 呈现方式 页面
23. 2.3 页面引擎 页面片配置 如何描述 布局和逻辑? —— DSL 和组件标准 页面片配置 如何变成 布局和逻辑? —— 渲染器原理 编辑器 Designer 渲染器 Renderer
24. TOPICS 1. 页面片的概念 2. ▶ 如何描述页面片 3. 组件标准 & 组件开发 4. 渲染页面片 5. 编辑器
25. 2.4.1 页面片 DSL 和 组件能力 DSL: 简练地描述页面片的样子 & 行为 组件能力: 决定了开发者能力的发挥空间,以及页面片好不好搭 DSL 清晰表达 70% 场景,保留槽位 (eg. 代码…) 给 30%场景 + 少量代码 充足的组件能力 简练的DSL 完整功能的页面
26. 2.4.2 一些概念 & 规范 SimpleFlowStep Pagelet type props … Layout layout lessCode reportParams dataSources triggers styleSheets …… type props slots / children subPagelets style events … UI组件 逻辑组件 SimpleFlow steps comment debouncing 数据源 async function
27. TOPICS 1. 页面片的概念 2. 如何描述页面片 3. ▶ 组件标准 & 组件开发 4. 渲染页面片 5. 编辑器
28. 2.4.2 一些概念 & 规范 页面片 里的 组件 Layout 组件/逻辑原子 Meta 数据源实例 Model • • • • • • • • • • • • • • • • • • • • •
29. 2.5 组件开发实例
30. 2.5 组件开发实例
31. 2.5 组件开发实例
32. 2.5 组件开发实例 WUJI 2.0 本地CLI启动 Webpack 在实际的页面上 HMR 调试组件 HMR 组件加载器 WebSocket 页面引擎
33. TOPICS 1. 页面片的概念 2. 如何描述页面片 3. 组件标准 & 组件开发 4. ▶ 渲染页面片 5. 编辑器
34. 2.6 渲染页面片 让「页面片配置」跑起来 布局 数据 逻辑 … 子页面片 子页面片 Pagele t Layou t Simple Flow 子页面片 子页面片 子页面片
35. 2.6 渲染页面片 CRenderer 组件 • CRenderer • CRenderer 作为 CRenderer 的 参数 传入 上下文 CRenderer CRenderer CRenderer CRenderer
36. 2.6 渲染页面片 运行! 你的 render 函数 à . Vue / React … 虚拟节点树 à . 渲染出DOM
37. 2.6 渲染页面片 运行! 低代码的手段 你的 render 函数 à . Vue / React … 虚拟节点树 页面片实例 数据 Model 页面配置 呈现方式 描述的 呈现方式 页面配置 状态 变量、callbacks… à . 渲染出DOM
38. 2.6 渲染页面片 ? 在 render() 里递归遍历整个树 ? 生成代码,然后交给eval / 框架的compiler 页面片实例 组件配置 à 组件Factory 数据 Model 呈现方式 页面配置 状态 变量、callbacks… 组件Factory 与 页面片生命周期 关联 • • 响应式更新: 数据 Model 变化 触发渲染
39. 2.6 渲染页面片 方便挂载Hooks、额外信息、额外逻辑 准备阶段收集的信息,可以用于做一些小优化 UI组件、逻辑组件 都适用 (比如数据源、定时器、触发器等) 存在渲染时钩子 子节点都是纯静态的 可用静态优化策略 Yes - - No Yes Static Tree Hoisting No No Static Props Hoisting 一个有关优化的示例
40. TOPICS 1. 页面片的概念 2. 如何描述页面片 3. 组件标准 & 组件开发 4. 渲染页面片 5. ▶ 编辑器
41. 2.7 页面编辑器 · 布局 · 属性 & 样式 · 数据源 · 行为 · LowCode & 表达式
42. 2.7 页面编辑器 · 与组件Factory结合 访问当前页面实例下 每个节点的 State 和 Factory 收集它们的 位置、DOM实例、错误检查结果等
43. 2.7 页面编辑器 · 拖拽和插槽 基于 Drag and Drop API 结合前面的 DOM,找到插槽和放置点
44. 2.7 页面编辑器 · 子页面片 只关注一个 CRenderer 实例 只编辑一个页面片(Pagelet) 进入 Scope 后,对应的数据源信息也会变化
45. 2.7 页面编辑器 • 基于数据源的 Schema 推荐组件 • 数据源就像文档一样清晰 • More…
46. 2.8 总结 - 页面片的应用场景 & 概念 - 组件开发 - 将页面片运行起来 - 渲染器和编辑器结合
47. 03 成果和展望 在实际的场景和应用中得到了验证
48. 3.1 我们的平台
49. 3.1 我们的平台
50. 3.1 我们的平台 · 完善逻辑 在组件属性、行为逻辑等地方支持 JS & 表达式 基于 数据协议 辅助编辑 可组合简单流程,也可插入自定义 JS 片段
51. 3.2 使用情况和反馈 用户 (包括非前端开发) 能够独立、快速完成页面开发。 如果数据来自 DB / 结构清晰的 RPC,可以 零代码实现想要的页面。
52. 3.3 未来展望 更多需要 数据 + 布局 + 逻辑 的场景 页面片 as 组件 更好的表达 & 理解需求的逻辑
53. 感谢倾听 Have Fun

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 17:47
浙ICP备14020137号-1 $Map of visitor$