You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A low-code development platform (LCDP) is software that provides a development environment used to create application software through graphical user interfaces and configuration instead of traditional hand-coded computer programming. A low-code model enables developers of varied experience levels to create applications using a visual user interface in combination with model-driven logic.
使用元数据来自动生成CRUD页面
在平常的基本需求迭代中有许许多多像下面这样的纯粹的CRUD页面的开发。在B端业务中我们不免需要写一遍又一遍相似的样板代码,虽然不同的项目业务逻辑不同,但是我们确需要写相似的 表格展示页、表单、搜索,这样的应用我们统称为CURD类应用。据不保守估计这样的类似应用可能会占到业务的**30%**以上。
low code是什么
lowcode 是指通过 GUI、配置化的方式代替传统的手写代码编程,让经验背景不同的开发者都能在低代码开发平台上,基于可视化的 UI 和模型驱动的逻辑来创建应用程序。
例如阿里的icework飞冰是一个可以通过物料市场进行可视化拖拽的低代码平台。配合它们的物料市场,能极大的加速前端应用的构建。
但是我们这里不采用可视化拖拽的方式来做腾讯云控制台业务:
tea-component
还尚不具备拖拽生成low-code的能力Model-driven logic - 模型驱动设计
回到数据的model上来,其实我们的表单表格的核心都是基于数据来展现的,那么数据是哪来的呢?数据库里存取的,这些数据库里存的数据都可以称之为元数据,这里我们接小刀分享的文章前端元编程——使用注解加速你的前端开发介绍的前端元编程的概念,我们使用typescript里的
Decorator
,Reflect Metadata
来定义和提取元数据。Decorator
和Reflect
将CRUD页面所需的样板类方法属性元编程在Model上。相应的
Decorator
的定义如下:String
就对应Input
组件 ,Number
就对应Input type=number
的组件,Array
就对应Checkbox
组件,Boolean
就对应Switch
组件。如果String
再定义enum
属性就会变成Radio
组件。Person Class
直接生成所需要的列表和表单展示页了。但是我们还缺少最重要的api请求接口。到目前为止都只是前端的Model生成Form和Table的内容,但是其实数据库也是可以根据元数据生成的。
利用ORM来通过元数据生成后端CRUD接口
ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。
这样我们就实现了一个由元数据驱动的CRUD前端应用。
总结
这种前后端独立应用开发的开发模式正好对应微前端+后台微服务化的开发模式。
最近BFF的概念很火,可以让后端将ui对应的接口我们自己来维护,即将后端的Controller层接过来,这样就不会有前后端沟通某个数据排序谁来做的问题了(ps:不过这样的话前端就得干更多的活了😓,让后端更专注于底层)
这样做的缺点也是显而易见的,像这样将部分业务逻辑耦合到Model层后,若后续需要添加更多的功能,Model层会越来越庞大,也越来越难以维护,所以我建议只针对这种纯粹的CRUD应用采用这种前端元编程方式,不需要过多的配置,由数据Model直出页面布局。但是更复杂的前端应用就不合适了。当然这里也只是提供一种思路。相信未来大家一定能有更好的办法来解决现在的问题的~
The text was updated successfully, but these errors were encountered: