这将是一个系列文章,目录在这里
前言
PaaS平台是一个能够让业务开发者忽略掉底层实现只关心自己的业务逻辑的开发平台。前文 中已经简单提到PaaS平台大概是要做什么,并且简单举了一个人员管理的例子。当然这个只是一个例子而已,我们觉得,大部分的功能都是相似的,人员管理页面存在列表页、创建页、编辑页、详情页,会议管理也存在列表页、创建页、编辑页、详情页,只不过里边展示的字段,相关的按钮名称摆放顺序稍微有点不同而已。
现在我们使用前文中提到这个例子,讲解一下PaaS的NoCode能力怎么实现。
首先来解释一下什么是NoCode,就是字面意义上的不写代码来实现功能的能力。即将原本由代码来实现的通用的页面上的展示位置也好,功能也好,统统放到配置里边。然后加载配置渲染页面和逻辑。
下面我们来分析一下前文中提到的具体示例,来分析整体功能具体应该怎么实现。

首先这个新建页面存在了几个字段(姓名、职业、城市、年龄、签名),如果我们按照做普通软件的思路,那么必然存在一个实体叫做人员,然后这个人员里边,必然存在相应的字段。

然后我们需要创建一个新建页面,然后将这几个属性写死在页面上。对于PaaS来说,User对象本身,并不是在程序中直接写死的某一个对象而是,某一条数据的配置。为了能够实现这个配置。首先我们可能需要规划一下,我们需要存在哪些可以描述人员的相关表。其实这是一个已经存在的概念,叫做元数据。
元数据(Metadata)
元数据的大致概念就是描述数据的数据,比如说通常来说User本身就已经是个数据了,我们现在需要创建几个秒来描述User的相关表现。
数据模型(Model)
首先从定义User这个Model开始,要定义一个Model,必然首先要有一个表来存储这个Model的相关数据,所以我们现在数据库中定义Model表,大概是这个样子

然后插入一条人员相关的Model数据。这个时候,大概就相当于你在代码里边写了User的这个类,但是还没有添加属性,并且在数据库中创建了User这个表格但是并没有创建任何字段一样的感觉。

数据字段(ModelProperty)
创建了Model之后,我们自然要给这个Model加上点字段,不然这个Model好像并没有什么意义。加字段,然也是往数据库中创建一个表,然后在表格里边添加数据。

然后添加上我们的相关数据

到这里,大概就相当于,我们的User类里边有了属性,然后数据库的相关字段也创建好了(注意,只是原始数据准备好了,但是数据插入的时候放到什么地方,还没有处理呢)。
表单(Form)
现在我们只是做了原始数据的初始化,但是那个创建页面长什么样子,要展示那些字段还一个都没有提呢。总不能所有的字段都展示吧。为了表示这个数据,所以我得先创建一个表单。

然后我们添加表单数据。

接下来,我们准备给表单添加属性。哦,不对,这个表单样式有点怪怪的。

他实际上排版是不一样的,上半截是两排的,但是签名部分则不一样是一条的。那么这种怎么办?我想我们得在表单上边加个块的概念。上半截是一块,下半截是一块。
表单块(FormBlock)
首先定义一下块的表格

然后添加两块数据,用来分别表示上半块和下板块。然后ShowType则是究竟怎么展示的枚举(0:一行展示两个;1:一行展示一个)

表单字段(FormProperty)

然后分别添加两个块数据的相关字段

编辑页面、详情页面数据中的数据其实也是一样的,就是一个Model的数据究竟应该怎么展示在页面上而已。所以这个可以用同一个数据。

详情页面出了怎么展示内容,还有右上角的两个按钮需要展示。这两个按钮则需要专门描述。

按钮(Button)

其实Button的功能就比较容易描述了,首先他需要有一个唯一的编码,然后他需要设置展示的内容,然后需要定义他的参数(字符串描述就可以,至于怎么执行再说),然后他会出现在哪个页面上(列表行、列表头、详情页都可能会出现按钮)。
按钮引用(ButtonMapping)

定义好了按钮需要设置什么地方用于引用这个按钮,只有被引用的按钮才会出现在对应的界面上。
列表页面则完全不同,他需要专门的数据来描述

首先简单分析一下列表页面都有哪些数据需要定义
- 列表叫啥名
- 都有哪几个字段能搜索
- 列表头上展示哪几个按钮(前边提到了)
- 列表行上展示哪几个按钮(前边提到了)
- 列表本身要展示哪几个字段
列表页(ListView)


这个表里边定义了应该展示成啥名,然后使用哪个List定义展示列表本体,使用哪个搜索来展示搜索内容。
列表(List)


只是定义了列表而已,其实具体展示什么还得看列表头内容
列表头(ListHeader)


搜索(Search)
定义一个可以被引用的搜索实体


搜索项(Search)
定义都有哪几个字段可以搜索,组成搜索实体


最后
至此,我们已经使用了元数据描述了,原本应该使用代码实现的所有的功能。但是这个只是定义而已,我们下一步需要实现平台代码,加载这部分元数据并且渲染对应的逻辑,实现原本的功能。
可能只是实现一个人员管理,是觉得没有必要,因为我直接实现不是更快吗?但是如果,你想再实现一个XX管理,你想想看你需要做的事情是什么?只是初始化一遍这些数据,对应的功能就已经在了。完全不需要开发,定义数据,可能你想好了怎么定义,真的要动手做的话,半天一个模块就搞定了,火力全开。
原来做一个功能模块,可能需要两个人捯饬一两个月,现在需要一两个人捯饬一两个周。
当然了,这么做也是存在局限性的,所有的页面基本上都是标准的。想要扩展需要做额外的功能,当然肯定也是可以做的,之后回慢慢讲到那个位置。
这将会会是一个非常漫长的系列,加油