LowCode本质

2020年主流技术媒体和大厂纷纷入局低代码(LowCode)!显然,LowCode这一说法仅仅是一种愿望表达,即我们希望大幅降低代码编程量,这意味着更少的工作、更快的交付、更稳的系统,然后从老板的角度,它带来更低的成本、更高的利润和更广的市场等。作为一种朴素而美好的愿望,LowCode的本质与FastCode/SlowCode一样,那就是它没有什么本质,或者说它的本质就是对理想中的一种现象的描述。当所有其他指标都相同的情况下,FastCode肯定比SlowCode强。同样的,在提供同样功能特性的前提下,LowCode肯定比HighCode更让人青睐。

要注意一点是:Code Low不代表Code Less。我们要清楚以现在的科技水平,在无代码领域是做不到的,如果仅仅是拖拖几个空间就能用的那种编辑器,不是又丑又流水线,就是平淡索然无味。还不如外包给别人做一个漂亮酷炫的界面来的有价值。

LowCode需要可视化编辑器吗?

LowCode减少编码工作无外乎有两种方式:

  1. 实质性的减少针对特定业务所需要编写的代码量
  2. 将传统上需要编码的工作转化为非编码的活动

可视化设计在LowCode中的作用就对应于第二种方式。相比于编程,它有两个优点:

  1. 可视化交互更加直观具体,所需编程知识更少
  2. 可视化交互约束性更强,更不容易出错

可视化设计无疑是目前LowCode平台厂商的核心卖点之一。但如果第一种抽象方式做得足够简单,我们并不一定需要可视化设计器。买不起豪华设计的穷人一样可以LowCode。

最早前端UI的可视化编辑器是流行比较多的,由于后台的语言百花齐放,相对前端的酷炫界面和管理软件对前端要求不是太多选择上的变化,基本一个公司定性用了哪种前端语言基本上就不频繁改变。

对后台服务端来讲,已最有分量的java语言来说,在IDEA上集成脚手架、Mysql建表POJO生成,基本上就已经到顶了。反观如果要做成低代码,这些代码编辑器的厂商更接近吃蛋糕的人,因为大家都在用你的产品,你也有创造这些可视化的能力。

但是非编辑器的大厂纷纷入局这一领域那就证明这东西不见得代码IDE厂商他能搞的定。IDE厂商是集基础科技抽象层,非IDE厂商是要解决业务抽象层,因为在众多公司他们的业务才是最值钱的。

我心中的LowCode是这样的

低代码不是不写代码,我需要低代码能够辅助我的专业开发工作,那么它一定要能在某种程度上本质性的减少信息表达。为了做到这一点,实现LowCode策略大概有如下几种:

  1. 系统化的组件重用
  2. 基于领域抽象的模型驱动
  3. 全端、全流程、全生命周期的一体化设计

组件的重用 - 是降低系统复杂度的一种通用策略:将复杂对象分解,识别重复组成成分。如一些开箱即用的组件库,无需程序员额外去开发、收集,确保所以的组件可以正确组合,提供良好的文档支持。

领域模型驱动 - 如果向一个系统投入少量信息就能够产生大量有价值的结果,那只可能是两个原因:

  1. 看似多样化的结果背后存在一个简单的逻辑内核,系统的本质复杂性并不如表面上看起来那么高。
  2. 结合其他信息源和全局知识,系统自动推导出了大量的衍生结果。

领域抽象是发现领域中的本质性要素和它们之间的作用关系,换句话说,其实就是削减不必要的需求。当我们在一个领域浸淫多年,有了充分的领域知识之后,我们会发现很多需求都是没必要的细节,我们完全可以选择只做性价比高的事情。如果将这种领域知识沉淀为某种领域特定的描述语言,则我们就可以极大的降低信息的表达量。

一体化设计 - 我们很大一部分工作量不是在做什么新的事情,而是重复实现数据的格式调整、完整性验证、接口适配等本质上属于对接转换的工作。一体化的设计便于减少信息的损耗,避免信息的重复表达,维护模型语义的一致性,屏蔽底层工具遍地是坑的悲惨现实。致力于稳定我们的技术生态。

举个例子:我在开发一个新的应用的时候,前期做了选型、设计、定稿后,要用JAVA语言Spring + VUE + Mysql开发一个报表的业务平台,如果我们有低代码平台那么我们在此平台中会在上面配置JDK版本、Mysql版本、连接实体配置生产(连带建表)、需要用的Spring集成组件。拖拉拽的VUE控件、前端直接预览,前端链接和后端交互资源配置完毕后,生成代码和GIT代码仓库打通。完成业务编辑后点击发布到(DEV、FAT、PRO),持续集成对接云服务器。

这是一个最简单的场景,它不需要我们去操心框架依赖包、Mysql查询的分页代码、VUE前端gird表格怎么写,配置+拖拉拽即可完成开发任务,它消除了我们开发人员对代码的隔离性,对于新手开发者消除了大部分代码风格差异。但是我们在各自的领域深耕多年,这些简单的场景远远达不到大规模投入人力的价值,我们期望它能支持自家公司业务领域持续集成的能力。在通用的业务上抽象寻求最大公约数演化成一体设计建模,这时候我们的交付能力增长是极快的。

LowCode流程图

低代码着重关注第二层代码设计领域。第三层持续交付层对接云厂商较为容易,虽然它也是成果展示层,但不在讨论范围。

xxxx1

LowCode原型

新建项目-选择语言

image-20221014180105590

选择JAVA架构依赖

image-20221014180043776

初始化脚手架代码

image-20221014180200598

默认为代码编辑界面

以程序员角色为例,有编码功底的程序员可以使用代码编辑模式,对代码有依赖性较强的直接感受。

可选领域建模界面

选熟悉的领域进行操作,可以大量节省明确需求的领域开发时间,

xxxx2

VUE编辑视图

对于没有编码能力的用户我们可以选择自己的领域视图去工作。如果我只是一个前端,那可以选择VUE视图,一些控件通过拖拉拽出一个又一个页面出来,并配置后端资源地址即可完成前端工作,该VUE视图同样适用于后端不懂前端编码的用户,因为前端控件代码都是拖拉拽出来的,不用关心VUE代码怎么写。

image-20221017100714285

Mysql设计视图

一般项目都会用到数据库比如Mysql,我们需要连接一个开发库建表建实体、entity和Dao层代码直接生成,将在这个编辑界面操作生成,连接Mysql和生成Mybatis Dao、Service、Controller、POJO基本代码。

image-20221017095804929

image-20221017100032306

通过生成Java代码功能可以选择生成Controller、Service、Dao、POJO,连带把增删查改的基本功能一起生成。

image-20221017100102674

生成HTTP接口API文档

诸如Rap2、Yapi、Swag这种类的接口文档生成

20170827191115007

LowCode业务原型

自定义架构原型

我们公司有自己的开发架构,在架构中实现了很多业务工具类功能,非常多的应用在使用,新的业务也需要用到这个功能的时候我们如何在低代码中提供呢?我的设计是跟功能编辑视图一样,提供插件模式,对,我把这些视图都是看成一个个插件,我们需要Mysql插件就开发一个这样的插件;需要集成Redis就开发一个这样的插件。我们的业务实现功能也一样,以插件的形式整合进来,在新的领域需要时整合也是非常容易抽象集成。

123232

业务领域的实现瓶颈在于模板代码生成,无法做更多细节上的事,但可从细分领域上去进一步模板化突破,这一点需要做取舍。所以细分的业务代码需要程序员接入并完善代码逻辑,这时候编码界面显得非常重要。

LowCode架构图

以上的实现在整个架构中不复杂,因为本质上是一个代码编辑器,代码只要存储代码和运用编辑视图去完善代码即可。运用大量的插件去丰富应用领域层,也灵活的进行领域拆分。

image-20221017101223398

亮点

该设计的使用人群是有否编程基础没有强关联关系,有编程基础则可对更深入更复杂的逻辑自性解决并丰富更多可能性,没有编程基础可以通过视图编辑功能把简单的架子搭建起来,复杂的逻辑可以交由开发同学完善。这就涉及到一个问题:多人协作

  • 实现了多人协作,协作的过程中需要让文档编辑人员看到当前**「一起协作的对象」和协作对象「实时编辑的内容」。我们还可以控制那些文件可编辑**、只读甚至私有化公司重要文件对某些人(如外包同学)不可读写的安全隔离属性。
  • 此设计剥离第三方存储依赖,根据环境和配置去连接第三方存储。可打通各家的云存储进行制品推送部署(因为这个设计是原生代码一整套,如何打包部署各种都能集成实现),接口文档生成,未来还可以生成单元测试类。
  • 可以定位为继组件技术之后,试图实现超越组件粒度的、粗粒度、系统级的软件复用的一种集大成的实践集合
  • 对历史项目代码友好,历史的项目如果想使用该低代码平台,只需要导入项目即可,领域编辑器也能正常提供服务。

不足

代码编辑器模式难解决的问题。

  • 增量代码与领域编辑器联动:如果生成了模板代码,如果程序员在代码文件中添加或修改文件有大量的变更,可能会导致与模板代码严重不符,这时如果代码文件和领域编辑器必须脱离开,如果要用代码编辑器必须以新的文件进行操作。
  • 领域模板升级变更导致与原本代码有出入:我们的领域代码变更的情况就如业务经常变更一样,一份代码不可能用几年没变化的,或者模板代码本身过时、有安全漏洞、有bug不得不做出修改的情况存在,那就变得和上面一样麻烦,必须用户自己改动、或者重新生成模板再贴入逻辑代码,这带来的变更难以评估。
  • 弱流程化,如果进一步屏蔽用户和代码的触摸,必须要逻辑流程化,必须要支持复杂的流程才能更灵活的满足用户的逻辑构建。

解决方案一种思考

把领域代码功能抽象SDK化。比如生产、消费kafka的代码,用户只需要实现发送逻辑、接收消息处理逻辑,把链接kafka的启停功能SDK化,只暴露handle(Object)给用户编写业务逻辑。我们需要屏蔽一些底层实现避免给用户对代码模板本身的破坏,这些抽象工作我们必须要提前考虑的,否则在后面升级的过程中用户也难用承受。

屏蔽用户触碰代码也会有不便利性,如果就些一些容易上手的逻辑,其实在代码中我花几分钟就能把逻辑写完了,如果要用逻辑流程,我估计会在上面花费20-30分钟才能完成需求,所以弱流程化也未尝不可是一个可放弃的。但有些用户并不会编码能力,他用流程图就能把逻辑实现了,确实也是难以割舍的左右为难,对流程开发者要考虑的产品人性化、便利化功底极深。

价值

低代码为企业提供了降低开发成本、提供效率、规范代码质量的价值。

降低劳动成本、缩短交付周期、加快试错速度,使得产品和服务以更快的速度进行迭代和优化,赢得市场竞争。

低代码并不意味着杀死程序员。低代码是新一代的软件开发方法和概念。它解放了程序员在没有技术内容的CRUD工作中,并做了更多的技术内容。更有价值的事情。

该产品还能在更多领域有快速抽象整合的能力,产品不经能打包成一个基础款,还能够对某些细分领域如金融领域、大数据领域等等进行打包。由于插件化的开发,可以满足一个大公司各个部门的领域集成,它是个可以开源也可以定制化售卖的平台。

上一篇 下一篇