基于ExtJS 的云南省高速公路基础参数管理系统的设计与实现
2022-03-01徐荣荣邓霁恒
徐荣荣,邓霁恒
(云南省交通科学研究院有限公司,昆明 650000)
0 引言
2020 年1 月1 日零时起,高速公路省界收费站正式取消,收费方式也由以前采用封闭式收费制,即按车型(或计重)、路径和里程收费,分路段拆账的形式转换为分段式按车型计费的方式。收费方式的转变,使得原有收费模式下的基础参数信息不再适用,因此迫切需要开发一个高效且运行稳定的云南省高速公路基础参数管理系统,实现对基础参数信息的统一管理。
1 采用的关键技术
1.1 ExtJS 框架
ExtJS 是一种用JavaScript 编写的前端框架,用于在客户端创建丰富的Web 应用程序,并实现了前后端分离。与其他前端框架相比,ExtJS 具有以下优势。
首先,ExtJS 提供了丰富的界面展示效果,开发人员不需要编写层叠样式表(Cascading Style Sheets,CSS),即可呈现绚丽的前端界面,同时ExtJS 也支持自定义的CSS 样式的引入,这在很大程度上提高了开发速率。
其次,ExtJS5 在原有MVC(Model View Controller)的基础上,新增了对MVVM 的方式的支持,即模型 层(Model)、视 图 层(View)、视 图 模型 层(ViewModel),MVVM 架构的一个重要特性就是通过视图模型层(ViewModel)实现了视图层和模型层的单向或双向的数据绑定,解决了控制层(Controller)职责过大、扩展性差的问题,具体架构模式如图1 所示。
图1 MVVM 架构模式示意图
最后,在与服务端进行数据交互时,ExtJS 通常使用代理Proxy 来处理数据的加载和保存,通过Ajax 技术从服务端获取数据后,将数据存入数据集Store中,并通过与代理同步的方式,将更新的数据发送给服务端,无须在前端拼接JSON 数据。
1.2 JDBC 技术
JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的结构化查询语言(Structurd Query Language,SQL)数据库存取和操作的公共接口(一组API),定义了用来访问数据库的Java 标准类库,可以以一种标准的方法使用这些类库,从而方便访问数据库资源。JDBC 为访问不同的数据库提供了一种统一的途径,为开发人员屏蔽了一些细节问题,使得开发人员使用JDBC 就可以连接任何提供了JDBC驱动程序的数据库系统,无须去了解数据库系统的特点,从而大大简化了开发过程。
1.3 JSON 技术
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用独立于语言的文本格式,易于人阅读和编写,同时也易于机器解析和生成,由于相对XML 而言,其具有更小、更快、更易解析的优势,JSON数据交换格式得到广泛应用。
2 系统架构设计
该系统采用表示层、业务逻辑层和数据访问层3层架构设计,表示层使用的ExtJS 框架,实现用户界面展示及请求发送;业务逻辑层使用servlet,实现用户请求的响应和业务逻辑的处理;数据访问层使用JDBC技术,实现业务数据的查询、更新和存储操作。系统按照省中心、路段分中心分权限进行设计,为用户提供收费路段、收费单元等基础信息的查询和更新,以及参数版本生成等操作。
3 系统功能设计
该系统主要功能包括参数管理、路段差异化管理、审核管理、连通性查询、计费参数管理、最小费额查询等。
参数管理功能是对业主、收费公路、收费路段、收费单元、收费门架以及收费站、广场和车道基础信息的管理,实现对基础信息的浏览、编辑和添加,并且数据编码规则符合相关接口规范要求。
路段差异化管理功能主要实现按车型折扣率为各个收费路段设置优惠起止时间、优惠时段及优惠类型。
审核管理功能主要用于管理人员对录入或是修改的基础信息合规性、真实性进行审核,只有经过审核后的数据才能正式投入使用,生成费率信息。
连通性查询功能主要用于确认单元和收费站出入口广场的前后位置关系,提升在线计费的准确性。
计费参数管理功能主要实现对省级路径参数、省级计费参数的查询,以及计费参数的生成及上传。
最小费额查询功能主要实现全网最小费额的版本号、生效时间、失效时间及发布时间等信息查询。系统功能结构图如图2 所示。
图2 系统功能结构图
4 系统实现
4.1 视图层的实现
ExtJS 框架采用的是一种单页面的设计模式,因此,在ExtJS 框架进行开发时,首先,将相关资源文件拷贝到本地工程项目目录下,并在index 页面上引入相应资源文件,在launch 方法中加载系统登录页面,实现登录页面展示工作。部分示例代码如下:
4.2 业务逻辑层实现
业务逻辑层的实现是通过调用数据持久层封装的方法,完成业务逻辑层的操作。首先,按不同的业务编写各自的业务实现类,并在类上以注解的形式标记访问路径;其次,每个业务实现类都继承了一个名为BaseService 的父类,该类主要提供了针对数据库表的增删查改方法,继承后可以实现方法在不同业务实现类中的复用;最后,根据具体的业务逻辑,编写实体方法,并以注解形式标记该方法的访问路径及具体访问方式。部分代码示例如下:
4.3 数据持久层实现
由于涉及大量的嵌套查询、关联更新,因此为保证程序的健壮性和稳定性,该系统采用的JDBC 数据持久层技术,通过XML 配置数据库基本信息,同时根据数据库连接对象,数据库表名以及Map 数据,生成更新、插入方法,在保证Model 类中的定义的字段名与数据库表中字段名称一致的前提下,能够将前端数据模型类(Model)返回的数据拼接成SQL 语句,进行更新和插入操作,无须转换为实体类对象。部分代码示例如下:
5 结语
文章基于ExtJS 前端框架技术,构建了云南省高速公路基础参数管理系统,由于ExtJS 具有丰富的UI组件以及双向数据绑定的特性,大大提高了开发效率。目前,该系统已完成部署工作,并在云南省110 个路段分中心投入使用,且运行稳定。