文 / 文静
编辑 / 麦壁瑜
前言
在软件体系架构设计中,有一种最经典的三层构造,即:体现层、业务逻辑层和数据拜访层。
- 体现层(UIL):展示给用户的界面,即用户在应用零碎时他的所见所得。
- 业务逻辑层(BLL):针对具体问题的操作,也能够说是对数据层的操作,对数据业务逻辑解决。
- 数据拜访层(DAL):针对数据的削减、删除、批改、查找等。
在明道云的利用搭建过程中,尽管不要求开发者去严格定义三层构造,但在很多产品设计上依然能够领会到分层的理念。例如:在显示记录信息的“前端表单”上,咱们能够通过数据的增删改或是自定义按钮来调用一个“后盾工作流”。工作流中能够进行各种简单逻辑的解决,并对相应的“底层工作表”进行数据操作。
这样的设计思路易于用户了解,不论是习惯代码开发的程序员还是老手小白,只有稍加相熟各层基本功能组件,就能很容易设计各种简单和个性化的业务利用。
三层构造的设计扩展性强,能够很好地升高各层之间的耦合度,有利于标准化和逻辑的复用。然而它也会带来一些问题,如:
肯定水平上升高了零碎性能 。例如:明道云对数据的批量简单解决次要依附大量的工作流(蕴含子流程),当简单的工作流嵌套较多的时候,保护起来会有难度。
前后端关联解决,牵一发而动全身。例如:为了在前端大屏上显示全面的数据可视化成果,要组合使用一系列字段、数据关联、工作流才能够实现。
明天就探讨一种非凡的办法,突破“前后端”的藩篱,让咱们能在工作表前端建设一个自定义的高速缓存。在一些非凡场景下能够晋升数据性能,同时让利用设计更加简洁。
自定义数据结构,把文本控件变成高速缓存
从 7.3 版本开始,明道云产品在原有的函数默认值根底上又往前推动了一步,开始反对“自定义函数”。这样一个小迭代,却能为咱们在前后端开发上开启一扇大门,让咱们能够尝试用新的形式来解决前后端简单数据交互的问题。
这个思路的外围是将工作表文本控件作为前端数据存储容器,通过自定义函数进行读取和前端逻辑解决。其中,数据自身还是来源于惯例的工作表,然而能够通过工作流读取一个或多个表的数据,并重构出一个独立的前端数据源。这个数据能够间接存储在工作表中,作为前端自定义函数可拜访的“数据缓存”。
示例成果
上面,我先用一个简略示例来演示这个操作过程。示例背景:在一个工作表中输出“员工工号”,零碎就能够主动带出该员工的姓名、岗位、入职日期。
实现这个成果的惯例形式步骤为:
- 在查问表中建设一个单条的人员岗位关联控件;
- 为这个关联控件设置一个查问他表的默认值,条件为以后输出的工号
- 通过他表字段或者文本控件默认值把该关联的相干字段引入到以后记录。
能够看出,这个过程须要多个组件的联结应用,且必须要求查问表单动静建设和人员表的关联。前台执行效率较慢,关联字段也做不到实时刷新显示。而通过明天介绍的自定义函数模式就能够完满解决这些问题,上面看一下成果。
步骤解说
1. 首先,在查问表单中设置一个“数据缓存”容器,用一般的文本控件即可;可放弃暗藏状态。
2. 依据理论业务对数据的需要,用工作流在后盾生成特定 JSON 格局的数据源,并保留在下面的“数据缓存”容器中。这里的数据源格局非常灵活,能够反对一些绝对简单的业务(参考:使用代码块将工作表数据转为数组 https://bbs.mingdao.net/topic…)。
3. 在指标控件中设置自定义函数。通过加载对应的“缓存数据”,再联合自定义 JS 代码,即可实现自定义的判断和计算逻辑。如本示例中,依据输出的工号检索数组对象,并显示其中的字段值(能够依据输出实时刷新数据)。
更多利用场景
除了输出工号主动显示员工信息以外,这个操作方法还能够利用在各种场景中:
1. 考试测评中实现试卷题目一次性加载
在线考试、测评场景中,试卷题目一次性加载;题目的切换无需后盾工作流,纯前端刷新更加顺畅。
2. 订单明细按条件动静汇总统计
如果按规范的形式,咱们只能先预置几个带有筛选条件的汇总控件,再用公式字段将所有汇总值加起来。而用这种自定义函数就能够实现按条件动静汇总。控件的应用数量也更少,而且汇总数量能够轻松冲破 1000 条的限度。
数据统计实现形式如下:
3. 较为简单的判断
在预约会议室的场景中,要依照自定义的会议起止工夫,主动判断并显示可用会议室列表。
总结
明天探讨的这种形式让咱们在规范产品体系之外,能够构建出本人独立的前端数据缓存,实现基于自定义函数的一些非凡数据处理逻辑。当然,这种形式也有肯定的局限和要求:
1. 只在人工执行数据操作时触发
自定义函数是一个纯“前端”性能,只能在人工进行数据操作的时候才会触发。如果其余事件会影响数据的变更还是要基于规范的“后盾”工作流来解决。
2. 自身无奈和底层工作表数据实时同步
尽管对大量数据的汇总计算能够超过 1000 条,然而因为此数据源只是底层工作表的一个正本,自身无奈和底层工作表数据进行实时同步,除非通过工作流频繁同步。所以这种形式适宜解决绝对动态的数据。如下面的示例,一套考题生成后个别就不会再变动了,一个订单的明细在进入肯定阶段后,如审批通过,也不会再做变更。
看完这篇文章的你,无妨也尝试用这种形式整合前后端数据,做一些乏味的摸索。