数据源
shoeLastGender
type:get
params:null
returnType:JList
requestUrl:www.baidu.com
shoeLastFootType
type:fixed
params:
shoeLastGender JString
returnType:JList
requestUrl:www.baidu.com
shoeLastSize
type:get
params:
shoeLastGender JString
shoeLastFootType JString
returnType:JList
requestUrl:www.baidu.com
检查器
shoeLastGendercheckerer
type:post
params:
shoeLastGender JString
result:JBollean
resultMsg:JString
url:www.baiduchecker.com
shoeLastFootTypecheckerer
type:post
params:
shoeLastGender JString
shoeLastFootType JString
result:JBollean
resultMsg:JString
url:www.baiduchecker.com
shoeLastSize
type:post
params:
shoeLastGender JString
shoeLastFootType JString
shoeLastSize JString
result:JBollean
resultMsg:JString
url:www.baiduchecker.com
表单编排
对于下拉框组件,前端是没有任何必要做校验的,我之所以写这个东西在这儿,是因为我们的数据引擎也需要做校验。数据引擎校验的时候,会拿到用户提交的表单内容,然后拿到相关key绑定的校验器,然后按照校验器定义向这个校验器传递参数,从而实现校验工作。
下拉框组件:
字段名称: 鞋楦男女
绑定的属性: shoeLastGender
数据源:
shoeLastGender
检查器:
shoeLastGenderchecker
params:
shoeLastGender: context.shoeLastGender
下拉框组件:
字段名称: 鞋楦脚型
绑定的属性: shoeLastFootType
数据源:
shoeLastFootType
params:
shoeLastGender: content.shoeLastGender
检查器:
shoeLastFootTypechecker
params:
shoeLastGender: context.shoeLastGender
shoeLastFootType: context.shoeLastFootType
下拉框组件:
字段名称: 鞋楦码数
绑定的属性: shoeLastSize
数据源:
shoeLastSize
params:
shoeLastGender: content.shoeLastGender
shoeLastFootType: content.shoeLastGender
检查器:
shoeLastSizechecker
params:
shoeLastGender: context.shoeLastGender
shoeLastFootType: context.shoeLastFootType
shoeLastSize: context.shoeLastSize
我的思考
我比较喜欢这种设计,用户在使用的时候,并不需要知道太多的概念,他只需要知道,在表单编排页面,将一个组件拖动到设计区域,然后为这个组件绑定上属性、数据源、检查器就好了。我们规定如果你绑定的数据源包含参数,那么你就必须提供这些参数,这些参数,一般是从表单上下文中获取。同样的,检查器有参数,用户也必须提供参数。
那么前端如何开发这个下拉组件呢?组件的名称为用户提供的字段名称,组件在用户完成数据后将值绑定到用户设置的属性上。当用户点击了这个组件,那么这个组件将会从服务端获取数据,然后用来渲染下拉框(这一部分可以在表单渲染器打开页面的时候,提取所有不带参数的数据源的数据,从而提升用户体验)。同时,组件会调用检查器,向后端询问该数据是否正确。
后端的数据引擎又该如何工作呢?表单编排结束后,会生成一份校验指导文件,这份文件大概格式如下:
{
"shoeLastGender":[
"SYS:NOT_NULL",
"SYS:Number",
"CUS:shoeLastGenderchecker"
],
"shoeLastFootType":[
"SYS:NOT_NULL",
"SYS:Number",
"CUS:shoeLastFootTypechecker"
],
"shoeLastSize":[
"SYS:NOT_NULL",
"SYS:String",
"CUS:shoeLastSizechecker"
]
}
我来解释下这份文件如何指导数据校验器工作,当校验器读到shoeLastGender的所有校验规则时,他会一条一条的去执行:
- SYS:NOT_NULL代表系统定义的,非空的校验,校验器可以使用StringUtils工具来进行判断。
- SYS:Number带包系统定义的,数字的的校验,校验器会使用Number之类的工具类完成。
- CUS:shoeLastGenderchecker是我们自定义的校验器,数据引擎会去检索出该校验器的数据定义,然后按照该校验器定义,从表单的提取数据找找到所有的参数,并拼接出校验请求,去访问相应的服务,进行校验工作。
我接下来的工作只提供这种纯服务版的设计,因为我真的解决这种方案更具备可实践性。