本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
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,感觉有一个小遗憾
各个讲师的内容参差不齐,有的讲师讲的是设计方面的实践,有的讲师则是直接在分享自己作品的使用手册,有的讲师则是结合源码讲述自己遇到的问题以及解决方案。确实这样能够让不同水平的参与者都有所收获,但时高时低的体验有点出戏(希望能按由浅入深的顺序安排课题,并尽量把相关的课题安排到一起)