企业库中的案例(服务端版)

数据源


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的所有校验规则时,他会一条一条的去执行:

  1. SYS:NOT_NULL代表系统定义的,非空的校验,校验器可以使用StringUtils工具来进行判断。
  2. SYS:Number带包系统定义的,数字的的校验,校验器会使用Number之类的工具类完成。
  3. CUS:shoeLastGenderchecker是我们自定义的校验器,数据引擎会去检索出该校验器的数据定义,然后按照该校验器定义,从表单的提取数据找找到所有的参数,并拼接出校验请求,去访问相应的服务,进行校验工作。

我接下来的工作只提供这种纯服务版的设计,因为我真的解决这种方案更具备可实践性。