实体模型,视图模型,表单模型,表单规则引擎,这几部分内容是自定义表单核心内容,之前的文章已经介绍了实体模型,这篇文章介绍一下视图模型管理。
我们平时见到的一些管理系统或者多数程序员做的一些CRUP操作,比如我们接触最多的列表管理、表单Form管理、树管理等,这些功能在一个后台管理系统中最为常见也最为繁琐,对于一个后台管理类的系统来说,可能60%左右都在做这样一些繁琐且无聊的工作,其实这些功能我们可以进行归纳总结,进行抽象,列表管理无非就是各种基本查询字段定义、高级查询定义、基础的一些功能按钮、比如新增或者导入导出Excel等、列管理、排序分页等,对于表单Form管理,无非就是字段排序显示、字段用什么控件显示、保存时验证、新增还是修改等,这些功能我们可以按照大的方面抽象,实际使用的时候,要什么功能就打开什么功能,更者我们可以做成模版,常用的功能根据模版自动生成,配置的大多数过程都可以省略。
实体模型管理就是对这些具体典型功能的抽象,真实业务根据实体模型动态生成具体业务功能模块。
先上一张整体设计图
视图关键字段说明:
ViewType(视图分类):视图分为列表视图、表单视图、树视图,后面还可以灵活的添加其他类型的视图。
Version(版本):每一次修改视图的任何信息,都会重新生成一个版本号,浏览器存储视图信息,每打天一个页面,会将本地表单版本和视图版本传递到服务端比较版本号,如果版本号发生变化,重新请求视图数据(一般系统交互后,视图及表单定义信息很少会发生变化)。
PropertySettings(视图属性):存储前端的一些样式,比如列表视图,存储前端List控件的一些属性,前端渲染时,读取属性并应用到控件中,一般需要结合具体使用的前端框架设置。
RelationInfos(关联信息):视图可能会关联其他视图,比如表单视图中,某个字段的数据从其他视图获取,这里会把关联视图的Id关联到此视图中。
Rules(规则):定义视图的规则,如点击编辑按钮,打开对话框、获取表单数据、将表单数据绑定到表单视图中。
WrapInfos(视图包装器):视图用显示在对框框中,视图显示在特定样式Div中或者Box中,前端在渲染视图时,如果有包装器,会用包装器包装视图之后再渲染。
Controls(视图控件):不同的视图控件显示的区域不一样,需结合具体的视图定义控件,前端渲染不同视图时,读取不同类型的视图控件,在特定的区域显示视图控件。
Extension1、2、3、4(扩展字段):对于不同的视图,存储不同的内容,比如列表视图,存储查询信息、视图特定列定义信息、表单视图则存储表单行定义信息。根据不同的视图类型使用不同的扩展字段。
表单视图:
表单类的视图由行和列组成,每一行一条行数据,每一行可以设置行属性,前端根据行属性动态渲染一行数据。
列可以显示具体的字段以及字段所使用的控件和验证表达式。列除了展示字段之外,还可以显示子视图或者子表单。视图、表单、控件所有行为均通过规则引擎控制。
列表视图:
列表一般分为查询区域、高级查询区域、表格区域、分页区域、列表控件区域,这些区域一般是可以固定下来的,每一个区域都可以做配置,比如查询区域,可以定义查询哪些字段,查询的字段Where条件怎么拼接,高级查询可以使用哪里比较条件,用什么控件渲染等。
列一般情况直接显示内容即可,但特殊一些列,需要单独定义,比如某列是数据字典,某列不同条件用不同颜色显示内容等。
先介绍到这里吧,具体细节参考架构设计图,有什么疑问可以咨询本人,自定义表单本来就比较复杂,概念比较多,需要抽象出来的东西也比较多,这里主要还是提供一些设计思路吧。
开源地址:https://gitee.com/kuangqifu/sprite
体验地址:http://47.108.141.193:8031(首次加载可能有点慢,用的阿里云最差的服务器)
自定义表单文章地址:https://www.cnblogs.com/spritekuang/
流程引擎文章地址:https://www.cnblogs.com/spritekuang/category/834975.html(采用WWF开发,已过时,已改用Elsa实现)
Github地址:https://github.com/kuangqifu/CK.Sprite.Job