李润龙 杨延喆 葛萌
关键词:微信小程序;目标考核管理系统;MVVM模式;SSMSD框架
中图分类号:TP311 文献标识码:A 文章编号:1006-8228(2023)11-167-05
0 引言
目标考核是高等院校每年必做的一项重要工作,目标考核从多个指标来考核各二级学院或者教职工年度任务完成情况。据了解,目前各高校在实施目标考核工作时,存在着如下问题:①部分院校还停留在手工统计阶段,仅有部分指标有其对应的管理系统(如科研部分有对应的科研管理系统),没有一个整体围绕目标考核工作的信息系统,“信息孤岛”问题严重制约了目标考核工作;②已有目标考核系统的院校,教师用户在数据录入时只能通过PC 端进行操作,而缺少移动端相关应用程序的支撑。
依据上述背景,本文设计并实现了一款高等院校目标考核管理系统。其客户端包括PC 和微信小程序两部分,服务器端采用轻量级Java EE 平台-SSMSD框架进行设计并实现,PC 客户端采用HTML5+Vue.js进行设计并实现。微信小程序为教师用户录入考核数据提供了便利。
1 相关技术
1.1 微信小程序及开发方案
微信小程序是微信功能扩展的重要接口,相对于传统的手机APP,利用微信小程序开发的应用程序具有安装简单、成本低、平台兼容性好、节省手机内存等特点[1-2]。依赖于庞大的微信用户市场,微信小程序便于推广和普及。小程序云开发[3]是微信团队与腾讯云携手开发的一套小程序的解決方案。该方案提供了简单易上手的API,可以满足基本的业务开发需求,无需购买服务器、数据库等后端资源[4]。与传统开发模式相比,具有节约成本、开发效率高、稳定性好等优点。
1.2 SSMSD 框架
SSMSD 框架是Spring MVC+Spring+MyBatis+Spring Data 的简称,它是目前主流的Java EE 服务器端的轻量级开发框架,具有运行速度快、开发效率高等特点。Spring 框架包含两大核心技术[5],分别是:IOC(Inverse of Controll, IOC)和AOP(Aspect OrientedProgramming, AOP)。IOC 用于JavaBean 对象的管理,包括Bean 的实例化、属性设置、使用和销毁。AOP 通过动态代理技术以切面形式实现动态方法增强,用于权限验证、日志记录、性能监控、事务管理等场景。
Spring 能够完成对Controller 和SqlSessionFactory 对象的依赖注入,实现对Spring MVC 和MyBatis 框架的整合。
Spring MVC 是一款请求驱动类型的框架,是Spring 的Web 组成部分。Spring MVC 基于MVC 模式,通过核心控制器、处理器映射器、处理器适配器、处理器和视图解析器等组件将Web 应用划分为视图、模型和控制器等部分,并确保它们之间的松耦合关系[6]。
MyBatis 框架对JDBC 进行了轻量级封装,解决了原生JDBC 进行数据持久化操作时所产生的冗余度高、Java 代码与SQL 语句耦合度高等缺点[7]。通过XML 文件或注解方式结合DAO 接口,实现SQL 语句和Java 对象之间的映射。
Spring Data 是Spring 中用来进行数据源访问的子框架。Spring Data 提供了统一的方式进行关系型数据库和非关系型数据库的操作,包括基本的添加、删除、修改、查询、排序和分页等。
1.3 MVVM 模式
MVVM(Model-View-ViewModel) 是在MVC 模式基础上发展起来的一种前后端分离的设计模式[8]。其中Model 代表的是数据模型,存储后端业务逻辑处理的结果。View 代表的是UI 组件,主要负责将模型数据展示给用户。ViewModel 是一个同步View 和Model 的组件,它负责将Model 和View 解耦合,它能够保证Model 中数据的发生及时在View 中展示出来;相反,View 中数据变化时也能同步到Model 中保存。
2 系统分析
2.1 目标考核工作流程
目标考核通过设立指标体系来考查二级学院的年度任务完成情况。指标体系包括综合指标和业绩指标两大类。综合指标设立三级指标体系,其中一级指标包括:教育教学、科研与学科建设、师资队伍、学生工作和党建工作。每个一级指标具有不同的占比。每个一级指标包含若干二级指标,每个二级指标包含若干三级指标。每个三级指标具有具体的得分计算规则。
年初由各职能部门按照所分管的指标为各二级学院下达年度工作任务量,经过发展规划处将任务量审核后正式下达二级学院进行实施。每位教职工按照指标录入相对应的支撑数据,由二级学院管理员以及对应职能部门管理员审核后,生成对应三级指标的得分数据。三级指标得分累加得到二级指标得分,二级指标累加得到一级指标得分,各一级指标按权重累计得到综合指标得分,综合指标加上业务指标得分即为某个二级学院年度考核最终得分。
2.2 角色划分
经过需求分析,系统中包含的角色有:教师、二级学院管理员、教务处管理员、科研处管理员、发展规划处管理员、人事处管理员、党委宣传部管理员、党委统战部管理员、招就处管理员、团委管理员、学科办管理员、学生处管理员、招生就业处、校领导和系统管理员等多个角色。上述所有角色对应的功能在PC 端都能完成,微信客户端只提供教师角色功能。教师角色为系统中最重要的一个角色,主要承担着录入各项考核指标数据的任务,包括教学数据、科研数据、突出业绩等三大部分。
2.3 系统功能模块
主要模块包括:指标管理、教学数据管理、科研数据管理、突出业绩管理、师资队伍数据管理、学生工作数据管理、党建数据管理、目标任务管理、报表管理、信息查询和系统维护。部分主要模块功能如下:
教学数据管理模块需要教师录入教学任务、课程设计、出版的教材、获批的教改项目、调课记录、教师本人参加教学竞赛、指导学生的大创项目等信息。教学数据的审核部分归二级学院管理员审核、部分归教务处审核。
科研数据管理模块需要教师录入所发表的论文、申请的专利、获批的项目(纵向和横向)、出版的专著以及科研获奖等数据。这部分数据由科研处管理员负责审核。
突出业绩管理部分需要教师录入指导学生获奖的各类学科竞赛、教师个人获得的荣誉称号(例如学科带头人、学术带头人、各类先进等)、以及参与的各类科研团体(平台)等信息。指导学生获奖各类竞赛由教务处负责审核,教师个人荣誉由人事处负责审核,参加各类科研团体由科研处负责审核。
系统维护是对各个学院以及教师在教学、科研和突出业绩等活动过程产生数据的查看和统计,如日志记录与统计报表。日志记录是实时记录用户的相关活动;统计报表侧重于整体状况,以统计图的形式反映不同年份、同一指标的信息,并将信息进行直观的对比,为后续制定目标任务等提供决策依据。
3 系统设计与实现
3.1 系统架构
系统总体采用Java EE 分层架构[9]+前后端分离技术进行设计与实现,具体如图1 所示。前端包括Web浏览器和微信小程序两个平台,主要完成表示层的功能,包括页面数据渲染、展示和用户交互。后端共享一个Java EE 服务器端平台,包括控制层、业务逻辑层和数据持久层和数据库,数据库采用关系型数据库MySQL 和非关系型数据库MongoDB。每一层的具体功能如下:
⑴ 表示层:该层分为前端UI 和交互。前端UI 负责系统程序的页面展示、数据渲染等功能,交互层负责一些简单的数据校验和前端的逻辑交互,并与控制层的Shiro 权限校验进行关联,对用户进入系统后的行为进行校验与授权。
⑵ 控制层:该层使用Spring MVC 框架负责具体业务流程的控制,完成客户端的请求转发以及响应。使用Apache 的Shiro 框架对系统角色的权限进行划分。Shiro 中的Subject 可以理解为用户的形参,用户通过Subject 与系统进行交互,用来实现登录、退出、权限校验等操作。SecurityManager 是整个Shiro 框架的核心,它管理着所有Subject。Realms 用于用户认证授权,可以通过继承AuthorizingRealm 类来实现自定义的Realm 方法。
⑶ 业务逻辑层:该层用来连接控制层和数据持久层,首先接收控制层传入的参数通过定义Service 对象完成业务操作,然后定义持久层需要的PO 对象,调用持久层DAO 对象完成持久化操作。上述过程需要的Controller、Service 以及DAO 对象都纳入SpringIOC 容器进行管理。
⑷ 数据持久层:数据持久层主要用来与数据源进行交互,为应用系统提供获取和保存数据的功能。本层一共使用三种不同的数据持久化技术,其中MyBatis和Spring Data JDBC 用来操作MySQL 数据库;Spring Data MongoDB 负责操作MongoDB 数据库。
⑸ 数据库:数据库使用了MySQL 和MongoDB两种数据库。其中MySQL 定义了教师信息表、指标体系表、考核信息表、论文表、专著表、科研项目表等。在MongoDB 中的集合包括论文、获奖、著作、项目等所有考核信息对应的支撑材料集合。系统将考核数据保存在MySQL 的同时,会获取支撑材料所对应的集合名称和对象id,并将其保存到对应的MySQL 数据表的字段中。
3.2 系统实现的关键技术
3.2.1 微信端保持登录状态
由于微信端通过wx.request()方法发起的每次请求对于服务端来说都是不同的会话,微信端需要在与服务器端的多次通信中保持同一个会话状态,因此需要微信端每次向服务器端发送请求时保持同一个Sessionid。具体的解决办法是:先从微信端登录,通过后,在服务器端通过request 对象的getSession()方法获得Sessionid,然后通过response 对象写回到微信端。微信端将接收到的Sessionid 保存到全局变量globalData 的header 中。由于微信端支持请求头操作,以后向服务器端发送请求时就可以通过请求头将之前保存的Sessionid 发回给服务器端,从而保持登录状态。上述操作的具体交互过程如图2 所示。
3.2.2 使用策略设计模式计算指标得分
目标考核中的一个核心任务就是计算每个二级学院的年度任务得分。由于每一个三级指标的考核计算逻辑各不相同,而且同一个三级指标在不同考核年份的计算逻辑也可能不同。为了确保指标得分计算逻辑和其他的业务逻辑解耦合,使用策略设计模式对指标得分计算逻辑进行了封装。以“国家级项目申报”这个三级指标为例,对应的策略设计模式类图[10]关系如图3 所示。其中ScoreStrategy 为策略接口,其中定义两个指标得分计算方法,其中comScore 表示某个二级学院在指定年份的综合指标得分;perScore表示某个二级学院在指定年份的业绩指标得分。NationalProjectScoreStrategyOne、NationalProjectScore-StrategyTwo 为不同的具体策略接口实现类,按照某种计算逻辑完成综合指标得分和业绩指标得分,National-ProjectScoreStrategyOne 中对于综合指标得分的计算逻辑是:comScore=(relNum/taskNum)*15,relNum 为引用ProjectDAO 对象获取某个二级学院在指定年份获批的国家级项目数量;taskNum 为引用SRTaskDAO 对象获取某个二级学院在指定年份的国家级项目任务量。ScoreStrategyContext 为策略接口应用的上下文,通过关联策略接口实现对某个具体策略类的注入以及完成对策略方法的调用;ProjectServiceImpl 为科研项目实体对应的Service 实现類,其中,通过关联策略上下文实现对具体策略的调用,策略上下文实现了对具体策略类和Service 实现类的解耦合。如果指标得分的计算逻辑发生变化,只需重新定义或者更换策略实现类并且在上下文进行引用的更换即可,从而保证Service 实现类中业务逻辑的不变性。
3.2.3 混合持久化技术的数据持久层设计
借鉴领域驱动设计中有关战略设计的聚合思想进行数据持久层设计,综合使用了Spring DataJDBC、MyBatis 和Spring Data MongoDB 3 种持久化技术。目的是为了充分利用不同数据持久化的特性,简化代码编写量,提高开发效率和可扩展性。在实体类中,以教师信息为考核信息的聚合根,对于教师实体的单表数据库操作,可以使用Spring Data JDBC 进行,因为它能够简化单表操作中实体类与结果集的映射关系。考核信息是附属于教师对象的属性,其操作通常涉及多表查询、动态SQL 等复杂操作,通过在MyBatis 的映射文件中定义SQL 语句来执行。当保存考核数据时,需要将信息对应的支撑材料保存到MongoDB,并将该文件生成的UUID 分别保存到MySQL 和MongoDB 数据库中,可以使用SpringData MongoDB 所提供的文件保存方法和MyBatis 所提供的数据更新方法。
上述操作可以定义在一个DAO 接口中(TargetInfoDAO),如图4 所示。继承CrudRepository 接口可以使用Spring Data JDBC 提供的持久化方法,Mapper 接口中定义使用MyBatis 框架的持久化方法,MongoDBRepository接口中定义使用Spring Data MongoDB的持久化方法。定义ExtensionMapper 接口和ExtensionMongoDB接口是为了Spring Data JDBC 中整合MyBatis 和Spring Data MongoDB,在这两个接口的实现类中完成对Mapper 接口和MongoDBRepository接口中持久化方法的引用。这样设计之后,在Service层就可以通过一个DAO 接口完成对实体类的所有持久化操作的调用,简化了Service 层注入持久层接口的数量,使得业务层代码更加简洁明了。
4 系统测试
首先采用黑盒测试针对各角色用户进行功能用例测试,确保各用例逻辑正确。然后采用JMeter 对服务器端进行性能测试,服务器内存16G,CPU 为IntelCore i7。以微信端教师角色常用的登录和科研信息查询操作为例,参考学校教工人数设置用户线程组为1000 并同时启动,选择监听器Aggregate Graph,测试数据如表1 所示。
根据测试数据表明:在1000 并发量的情况下,服务器平均响应时间在1s 以内,99% 的请求都在2s 内完成,各操作的平均吞吐量为110。说明采用本文方法所创建的系统性能良好,能够满足当前实际需要。
5 结束语
针对目标考核工作中存在的问题,利用微信小程序和SSMSD 框架,设计并实现了一个目标考核系统。从系统功能模块、系统架构和关键技术等方面详细描述了系统实现过程,通过系统的使用提高了考核工作的信息化和管理水平,为教师用户的数据录入提供了便利。下一步将围绕職能部门用户进行微信客户端功能的扩充,并对指标领域进行优化,确保考核指标与业务过程更加解耦,从而提高系统的适应性和扩展性。