7、架构:模板设计

news2024/11/27 4:39:58

在低代码开发中,除了基础组件与物料之外,模板也是必不可少的模块,是基于物料之上的更高级的产物,除了具备业务属性之外会更偏向专属的技术领域,例如可视化大屏、数据分析、中台管理等。

此外模板通常是比较完整的应用程序结构,可以快速创建一个具有基本功能的应用程序,并且可以根据需要进行修改和扩展,不再单单只有前端可见的内容,会与对应的业务绑定更深,比如电商、CRMCMS 等。

本章节就来带各位同学一起学习低代码中模板的相关设计。

模板中心


在设计低代码模板的时候,往往需要考虑以下几点:

  • 什么用户需要来使用模板
  • 模板具体需要做哪些事情
  • 怎么有效管理模板

对此,我们的模板中心需要具备如下的能力:

  • 业务需求:了解目标用户的需求和场景,以便针对具体实施事物进行设计,从而带来更好的用户产品体验;
  • 灵活可用:设计易于使用的界面和流程,将复杂度收敛到底层维护,让用户能够更流畅的完成任务;
  • 可维护性:打造标准化、自动化的模板管理方案,能够更加方便的管理平台内的通用模板的创建、修改、发布等相关事宜。

功能设计

如使用物料平台来管理组件一样,我们也需要一个可视化的模板中心来统一管理各种丰富的模板库,包括不同领域行业能力的应用,如企业人事管理、物流管理、电商报表平台、意见收集、疫情管控等标准化的能力,提供可视化的能力方便用户使用。

如下原型图所示。在设计初期,模板中心大体上需要具备以下几个功能:

format,png

  1. 模板分类:为了方便用户查找和选择模板,模板中心需要进行分类,如按行业、领域、应用功能等分类,提供细致化的市场管理;
  2. 预览查阅:用户可以先查阅模板的具体效果和功能,再决定是否进行安装使用;
  3. 模板发布:需要设计将应用发布为模板的能力,使用者可以将自己的想法和经验发布到模板中心,更好地管理自己的应用,方便团队其他成员和自己复用能力;
  4. 模板管理:需要设计管理员和用户相应的模板管理能力,可以对其进行删除和更新等行为。在这之上可以扩展相关数据能力,如收藏、喜欢、下载排行等 Rank 功能。

与常规的搭建不同的是,模板中心的使用者一般都是对开发并不熟悉的普通人,所以物料市场在开发的过程中一定要提供非常完善的功能,尽可能减少用户的理解与使用成本。

发布为模板

既然模板中心拥有能够管理示例模版的功能,那么理所应当的编辑器方面就需要在发布中开辟一条支线功能,那就是将当前的应用发布成为模板。

比如,公司销售员工小张需要做一个销售客户信息收集表,需要用户录入信息且进行数据管理。此时小张就使用平台搭建了一个简单的应用完成自己的工作。但是过了一段时间,小张的几个同事也有类似的需求,那么小张就可以将其发布为模板,他的同事就可以 Fork 当前模板到自己的编辑器下进行一些字段信息的修改和调整,从而快速满足自己需求的应用。

所以模板也可以看成更高级的复合物料,由当前领域的熟练工按照业务需求使用基础的物料配置一个模板,通过模板市场可以提供给不熟悉开发模式,或者对当前领域并不熟悉的人使用,如果熟悉淘宝装修的话,也可以理解一些设计功底好的运营配置好各种不同的营销店铺模板提供给小 B 商家使用。

模板工程


尽管低代码平台可以大大减少应用程序开发的时间和成本,但基于 Schema 配置出来的功能一定是平台内置的且要保持最大程度的通用性,所以在一些特殊的情况下依旧需要进行一些二次开发,和一些相应的配置及逻辑的修改。

因此,低代码平台通常会提供运行时渲染代码工程生成这两种产物结构,使得用户可以查看和编辑由平台生成的代码。这个机制可以是一个内置的代码编辑器,也可以是一种将代码导出为标准工程项目的功能。通过这种方式,用户可以在需要时查看编辑代码,从而更好地控制他们的应用程序完成需求开发。

如果需要实现这种工程,我们就需要抽离出一套通用模板提供给出码生成器,将 Schema 中约定的协议注入到模板工程当中,最后不管是在线编码还是导出二开都由用户自己决定。

导出二开有一个非常严重的问题,就是产物很容易脱离原有的 Schema 架构。一旦脱离了 Schema 的架构,这个项目就很难再次使用低代码模式去迭代了,如果想长期迭代,最好还是在线编码,约束开发者的编码界限。

即使导出二开有上述弊端,依然有其存在的价值,基础的功能都可以通过低代码配置完毕,而且通过模板渲染出来 ProCode 产物,从代码风格、命名规范、安全性等来说都能达到较高的水准,给未来的项目迭代打一个好底子。

模板工程是指一种预先配置好的代码项目,它包含了一些基本的代码结构、依赖库、配置文件等内容。

在团队中,我们往往都会有自己的脚手架(CLI)工具,其中一定会具备通用项目的拉取和创建。

哪怕团队规模小,也不会完完全全从 0 到 1 去搭建一个新的项目,都是利用已经封装好的一些特定模板项目来直接开发。这就是我们常说的模板工程了。比如 Vite 在初始化项目时,可以通过 --template [template name] 来指定需要生成的项目类型,以此来生成一个开箱即用的环境。

通常情况下,一个模板工程会包含一些通用的功能和模块,例如路由状态管理主题等,开发者可以在这个基础上进行扩展和定制。在低代码平台中,整个模板工程的基础模块通常会取决于产品的协议和工程的设计,基于这个基础之上才能保证后续生成的项目工程具备一定的扩展能力和可用性。

生成代码


开头就介绍了我们是通过Schema的通用协议来生成代码的,那么如何将 Schema 协议输出成完整的代码文件呢?

此时就需要用到一个前端历史发展以来最常见的技术,也就是模板引擎。通过模板引擎定义好渲染规则来插入相应的内容,最后将其输出成为一系列的文件夹与文件,最后插入到模板工程当中,就可以进行打包下载了。

如果有同学做过通过 SwaggerOpenApi 等接口协议生成本地 Axios 接口和 TypeScript 的类型的同学获取就会比较清楚内部的一些实现逻辑:

如下示例所示: 这是我早期写过的一个接口生成器 tpl,它是基于 ArtTemplate 的规则来实现的,通过拉取 yapi 或者 Swagger 的相关 JSON Schema 解析,通过以下提前声明好的模板配置,传入相关的数据就可以生成对应的接口请求函数文件。

import request from '{{requestImportResolve}}'

const {{name}} = (allParams, options) => {

  {{set isParams = params.length > 0}}
  {{set isQuery = query.length > 0}}
  {{if isQuery || isParams}}
  const {
    {{if isParams}}
      {{ each params }}
        {{$value}},
      {{/each}}
    {{/if}}
    {{if isQuery}}
      {{ each query }}
        {{$value}},
      {{/each}}
    {{/if}}
    ...data
  } = allParams
  {{/if}}

  return request(`{{path}}`, {
    method: '{{method}}',
    params: {
      {{each query}}
        {{$value}},
      {{/each}}
    },
    data: {{isQuery || isParams ? 'data' : 'allParams'}}
    
  })
}

export default {{name}}

当所有文件生成完毕后,就可以写入到本地目录。此时一个简单的接口代码生成器就完成了。

低代码平台的模板渲染也是一个道理,不过相比于生成接口请求而言,页面生成更加复杂,需要将国际化多语言、动态表达式、页面异步资源依赖、数据源等都做一个通用的生成处理。这里先简单做一个初步了解,后续在实现的时候会一步步去进行实现。

如下图所示,左侧是之前在协议篇提到过的基础协议结构,右侧则是模板工程的结构。在后面的实现过程中,会提供一个 @lgnition-lowcode/generate 包来完成以下 Schema 协议转换到模板工程的转换逻辑。

format,png

模板引擎对比

市面上有很多非常优质的模板引擎开源项目,已经获得了很多知名项目的认可。在这里我就简单列举一些我个人觉得不错的项目:

  • Handlebars.js:它使用基于标记的模板语言,支持条件、迭代、部分和帮助程序。它易于学习和使用,并且具有广泛的社区支持;
  • Mustache:也是基于标记的模板引擎,它的语法简单易懂,易于学习和使用。它支持条件、迭代和部分,可用于多种编程语言,并且有大量的社区支持;
  • EJS:基于 JavaScript 的模板引擎,它使用嵌入式 JavaScript 作为模板语言,支持条件、迭代和部分。它易于学习和使用,可以轻松地与 Node.js 和 Express.js 等 Web 框架集成;
  • doT.js:大小只有 4KB,渲染性能很好,支持原生的写法,无过多的三方依赖;
  • art-template: 是一个简单且超快的模板引擎,它通过范围预声明技术优化模板渲染速度,从而实现接近 JavaScript 极限的运行时性能。同时,它同时支持 Node.js 和浏览器;
  • Nunjucks: 它允许在应用程序中使用类似 HTML 的模板语言,从而快速生成动态内容。Nunjucks 支持变量、条件语句、循环语句、过滤器等基本语法,同时还支持继承、包含、宏等高级特性,可以用来创建复杂的模板结构。

由于我们未来的模板生成具备一定的复杂度,所以最终这个产品的模板引擎将选择 Nunjucks,具体的开发介绍将在后续的文章中进行。

总结


本章节主要讲了模版相关的设计与我们需要实现的模块。

  • 模版工程:提供了应用代码的生成下载,可以具备应用独立部署和二开调整的能力。
  • 模板中心:提供了通用解决方案的页面与应用的快速生成。

通过以上功能,用户可以根据业务需求进行自定义和调整,同时将低代码平台的适用人群扩大,还降低了用户的学习与使用成本。

写在最后

如果你有什么疑问或者更好的建议,欢迎在评论区提出。 👏

7 架构:模板设计

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s Label 2

在 k8s 中,我们会轻轻松松的部署几十上百个微服务,这些微服务的版本,副本数的不同进而会带出更多的 pod 这么多的 pod ,如何才能高效的将他们组织起来的,如果组织不好便会让管理微服务变得混乱不堪,杂乱无…

作物计数方法汇总

在研究农情的方向中,作物计数是一个很重要的方向,需要用到很多方法,这里做一个小小的总结 (1)地理栅格数据(tif图片)裁剪并生成带地理坐标的切片 如图需要将下图所示的tif图裁剪并生成切片(截图一部分) 源码来自&…

微服务 02-rabbitmq在springboot中如何使用(上篇)

目录 前言: 上文传送 -> 安装rabbitmq传送门: -> rabbitmq使用出现问题解决传送门: 1. rabbitmq的六大模式: 1.1 简单模式: (一对一) -> 业务场景: 1.2 工作模式: (一对多) -> 业务场景: 1.3 发布与订阅模式: (广播) 1.4 路由模式: -> 业务场景 …

计算机系统的层次结构

计算机系统 计 算 机 系 统 { 计 算 机 软 件 { 系 统 软 件 应 用 软 件 计 算 机 硬 件 { 存 储 器 运 算 器 控 制 器 输 入 设 备 输 出 设 备 计算机系统 \begin{cases} 计算机软件\begin{cases}系统软件\\应用软件\end{cases}\\计算机硬件\begin{cases}存储器\\运算器\…

YoloV8改进---注意力机制:引入瓶颈注意力模块BAM,对标CBAM

目录 ​编辑 1.BAM介绍 2.BAM引入到yolov8 2.1 加入modules.py中: 2.2 加入tasks.py中: 2.3 yolov8_BAM.yaml 1.BAM介绍 论文:https://arxiv.org/pdf/1807.06514.pdf 摘要:提出了一种简单有效的注意力模块,称为瓶颈…

06、Nginx反向代理与负载均衡

反向代理: 这种代理方式叫做,隧道代理。有性能瓶颈,因为所有的数据都经过Nginx,所以Nginx服务器的性能至关重要 负载均衡: 把请求,按照一定算法规则,分配给多台业务服务器(即使其中…

【论文笔记】Skill-based Meta Reinforcement Learning

【论文笔记】Skill-based Meta Reinforcement Learning 文章目录 【论文笔记】Skill-based Meta Reinforcement LearningAbstract1 INTRODUCTION2 RELATED WORKMeta-Reinforcement LearningOffline datasetsOffline Meta-RLSkill-based Learning 3 PROBLEM FORMULATION AND PRE…

CPU大小端和网络序的理解

引子 Big/Little Endian是Host CPU如何去理解在内存中的数据,内存中的数据是没有Big/Little Endian之分的(内存仅仅作为存储介质),而Host CPU才有Big/Little Endian之分。 不同Endian的CPU,从内存读取数据的时候&#…

Linux进度条

Linux进度条 一.基本概念1.回车和换行2.缓冲区2.实现倒计时 二.进度条1.前置工作2.代码实现 一.基本概念 1.回车和换行 回车:指光标移到该行的起始位置(\r)。 换行:换到下一行(\n)。 在c语音里\n将回车和换…

spring.boot 随笔0 springFactoriesInstance入门

0. 其实也没有那么入门 明天还要上班,速度write,直接放一张多样性比较好的 spring.factories 文件(取自 spring-boot-2.3.4.RELEASE.jar) # PropertySource Loaders org.springframework.boot.env.PropertySourceLoader\ org.springframework.boot.env…

知识图谱实战应用19-基于Py2neo的英语单词关联记忆知识图谱项目

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用19-基于Py2neo的英语单词关联记忆知识图谱项目。基于Py2neo的英语单词关联记忆知识图谱项目可以帮助用户更系统地学习和记忆英语单词,通过图谱的可视化展示和智能推荐功能,提供了一种全新的、更高效的记忆方法,并促进…

AtomicInteger使用详解

AtomicInteger使用详解 1、get():获取当前AtomicInteger对象的值。2、set(int newValue):将AtomicInteger对象的值设置为指定的newValue。3、getAndSet(int newValue):先获取当前AtomicInteger对象的值,然后将对象的值设置为指定的…

ROS1/2机器人课程的价值和规模

价值用价格,规模用销量。 免费的ROS1/2课程也很多。 2023版,15元,24人。 2022版,1.99元,21人。 价格不贵,人数很少,店家也很少。 当然,有朋友说,有免费冲击&#xff0…

宏晶微 音频处理芯片 MS7124

MS7124是一款高性能24bit数字立体声音频DAC,该DAC采用Sigma-Delta结构,支持标准的I2S数字信号输入,输出支持立体声和单声道。

比对Excel数据

以a个为准绳比对b表数据,添加比对结果列输出。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么…

大数据Doris(五十七):RECOVER数据删除恢复

文章目录 RECOVER数据删除恢复 一、Recover语法 二、数据恢复案例 RECOVER数据删除恢复 Doris为了避免误操作造成的灾难,支持对误删除的数据库/表/分区进行数据恢复,在drop table或者 drop database之后,Doris不会立刻对数据进行物理删除…

C语言进阶--文件操作

目录 一.何为文件 二.文件名 三.文件的打开和关闭 3.1.流 3.2.文件指针 3.3.文件的打开与关闭 打开文件: 模式: 关闭文件: 四.文件的顺序读写 4.1.常见的顺序读写函数 4.2.字符的输入输出fgetc/fputc 输出函数: 输入…

计算机存储层次及常用存储简介

计算机存储层次(Memory hierarchy) 存储层次是在计算机体系结构下存储系统层次结构的排列顺序。 每一层于下一层相比 都拥有 较高的速度 和 较低延迟性 ,以及 较小的容量 (也有少量例外,如AMD早期的Duron CPU&#xf…

pod 控制器 3

简单回顾 之前我们学习过的的 docker ,例如我们运行 docker run busybox echo "hello wrold" 他的实际内在逻辑是这个样子的 程序将指令推送给 dockerdocker 会检查本地是否有 busybox 镜像,若没有则去 docker hub 上面拉取镜像,…

windows下mysql配置文件my.ini在这个位置

windows下mysql配置文件my.ini在这个位置 选中服务邮件 右键----属性,弹出下图 一般默认路径: "D:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQ…