2021 TWeb 腾讯前端大会(一) 低代码利器--DSL

2,940 阅读3分钟

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

1024 对程序员是个特别的日子,腾讯在这特别的一天里举办了前端大会,把一年来遇到的挑战和突破都分享出来,助力前端的生态发展。

由于时间冲突和精力有限,我注重观看了低代码会场的分享,在此记录下来,分享给大家。

本文主要记录DSL部分。

DSL设计

这里主要分享的是腾讯问卷的DSL设计实践。 什么是DSL

适合DSL的场景

为什么腾讯问卷需要DSL?问卷包含了各种逻辑,比如跳转、题目显隐。对于不同的问卷这部分需求是高度类似的,但每次有新的需求都重新开发成本很高,其中包含了非常高的成本

  • 沟通成本
  • 维护成本(文档和代码)

懂业务的人不懂代码,懂代码的人不懂业务,但每次开发出来的表单都有高度相似的逻辑,不应该每次都重新开发,因此可以实现简单的DSL语法,让业务来写DSL,技术写DSL的编译器,把DSL变成js代码,这样就可以降低新问卷上线的成本

以下这些情况非常适合使用DSL

  • 重复性工作多
  • 沟通成本大,参加角色多
  • 业务非常清楚细节

PS 这里说一下,在表单需求的面前,DSL是一个非常好的解决方案,可以有效避免重复开发

编译器实现

可以借助pegjs,这个库可以非常快速地帮助我们搭建一套DSL的编译器

语法设计

先设计实体模型 设计DSL语法非常重要的一个点是:搞清楚使用对象。低代码平台的主要用户分为两种:最终用户和开发者。

面向最终用户

比如腾讯问卷,面向的是最终用户,所以DSL语法要尽可能接近最终用户的自然语言,这里有一个术语

领域专家优先原则

比如一个逻辑: 如果第一题选第二个选项,那么展示第二题

腾讯问卷的DSL语法就是 IF Q1A2 then show Q2。跟我们的自然语法非常像对不对!这样能降低用户的学习成本,提高使用意愿。

面向开发者

如果面向的是开发者,比如做了一个低代码平台来生成一个页面,通过输入json生成页面,则这个时候DSL的设计要更多的考虑拓展性、转换成本等,语法可读性反而可以适当降低优先度。比如jsx,就是一种面向程序员的DSL。

配套设施

为了让DSL编写起来更顺畅,我们还需要一些配套措施,比如编译器、预览功能、文档、语法高亮,这里可以用到另一个库codemirror

一些遗憾

我是在线上参加的TWeb,感觉有一个小遗憾

各个讲师的内容参差不齐,有的讲师讲的是设计方面的实践,有的讲师则是直接在分享自己作品的使用手册,有的讲师则是结合源码讲述自己遇到的问题以及解决方案。确实这样能够让不同水平的参与者都有所收获,但时高时低的体验有点出戏(希望能按由浅入深的顺序安排课题,并尽量把相关的课题安排到一起)