韦婷 张扬 陈艺璇
(1.广西工业职业技术学院 广西壮族自治区南宁市 530000 2.广西职业技术学院 广西壮族自治区南宁市 530000)
在计算机软件行业里,软件设计模式、软件架构、框架等概念的提出,是前人探索如何在软件开发的不同过程、不同层次上实现重用而总结出来的思想、方法和技术。从代码级语句复用、模块复用、结构复用、系统复用、文档复用到思想复用,软件复用技术几乎覆盖了整个软件开发的生命周期。设计模式即是抽象层级较高的思想复用技术,与语言无关,与平台无关,一套被反复使用、多人知晓的,并经过分类编目的代码设计经验的总结。前人总结出了很多种设计模式[1],也提出了很多模式的形式化方法,但是很少有人对模式组合进行正式的研究[2]。而模式组合最直接的体现便是复合模式,形式上是将多个设计模式结合起来形成一个“框架”,以解决一般性问题。对于一个软件系统,最密切相关的三类人员,即用户、开发者、维护者,本文即通过这三个不同的视角去探究设计模式及其复合关系、设计原则是如何指导系统设计,在达到降低开发难度,利于团队开发,提高系统可维护性的目标下,开发出一个高质量、高标准化、高安全性,符合高职院校实际工作需求的教师工作量管理系统。
设计模式主要分为三个大类,创建型模式包括工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式等五种;结构型模式包括适配器模式、装饰器模式、代理模式、外观模式、桥接模式等七种;行为型模式包括策略模式、模板方法模式、观察者模式、迭代子模式等十一种。
如何在客观世界的具体场景中选择不同的设计模式,再根据编程语言实现?首先将需要解决的问题进行抽象,其次根据不同设计模式适用的场景进行选择,最后再使用编程语言进行实现。多个设计模式之间必须要考虑到融合性、可扩展性,在设计过程中可使用UML 建模工具进行详细设计。通过反复的修改和扩展,从而得到一个高质量的软件结构。
图1:应用群系统的单点登录
图2:教师工作量管理系统功能总体架构图
图3:教师工作量系统中的设计模式
在用户视角中运用到的策略模式和单例模式,保证了各类用户的只有一个实例,在用户的权限管理设计中,可以根据部门、增删查改权限、职务级别等多种途径进行管理,可以设计不同的类来封装不同的途径算法,并使它们之间可以相互替换,这是典型的策略模式应用场景。在维护者视角中主要使用抽象工厂模式、策略模式和观察者模式,体现在统一数据接口功能和计算过程参数化功能模块,在根据权重自动计算教师工作量的模块中,当权重参数进行调整时,将自动通知所有依赖这个参数对象的其他所有对象,在这里权重参数对象就是观察目标,其他被通知的对象就是观察者,这是典型的观察者模式的模式动机。
在文献[3]中的“用户为中心”,“以人为本”的设计理念,认为在开发产品的每一个步骤中,都要把用户列入考虑范围,除了产品的功能,用户体验起着关键的影响。本文研究的重点不在于用户体验的诸多要素,而是把其中的思想,用于设计模式的分析及应用中。作为一个软件产品,在智慧校园和高职院校争创“高水平学校、高水平专业”的多驱动背景下,本文设计的是一个覆盖教学、科研等诸多方面,涉及教务处、人事处、财务处等多个部门的教师工作量系统,属于Web 应用系统。用户不仅是教师,还有相关的系部、学院行政部门人员及领导。对于用户,面对的不止有教师工作量系统,往往还有学校的其他业务应用系统。如果每个系统都要登录/退出之后,再一次登录去使用下一个系统,这种用户体检是不太好的。而系统间跳转一般需要系统与系统之间建立连接,若原系统间未曾对接过,便需要修改新增对接功能。这样既不具备可行性,也违背了设计模式中一条最基础,最重要的原则,即开闭原则——当新增一个功能时,尽量去扩展而不是修改。对于这样多系统组成的应用群,复杂性应该由系统内部承担,而不是用户。用户期待的应该是一次登录/退出,访问整个应用群与访问单个系统一样,即单点登录。本文项目基于统一的身份认证系统/中心,采用的是Webservice 技术实现的单点登录。统一身份认证中心接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。统一身份认证中心,承担的是多应用群中共性的功能或模块。这种具有共性,同时具备整体-部分关系正是 “组合模式”的设计思想的体现。应用群系统的单点登录如图1 所示。
粗粒度的权限管理,一般指的是资源类型的权限管理,比如菜单、页面按钮。等。而细粒度权限管理,就是数据级别的权限管理,比如系部的领导只能访问本系教师的信息,教师只看到自己的菜单。实现方式如当服务接口提供一个系部的id 参数,设计一个控制器,根据当前用户的信息得到该用户属于哪个系,调用服务时将系部id传入,实现该用户只查询本系的教师员工信息。对于同样的数据,对于不同的用户或者角色,可以有不同的显示,并支持进行各种处理,这是“策略模式”的应用。
对于一个学院,教师的基础数据以及学院组织架构数据应由人事系统下行到数据库,保证工作量管理系统和学院共享数据中心的数据保持一致性,而工作量管理系统中的数据有可能也会提供给其他系统使用,因而设计一个开放数据接口十分必要。有了统一的数据接口,系统间便具备了很好的扩展性。遵循接口规范,未来需要进行大规模数据分析、数据可视化的各类各级系统便能方便获取到相关数据。这便是设计原则中的依赖倒转,中心思想是接口编程,制定好规范,把展现细节的任务交给实现类去完成。
分析了国内高校的工作量管理系统,学校间的差异性使得计算公式和流程并未做到通用化。在完成教务处提供的工作量计算表格提取计算的公式并参数化的工作后,面对类别多,公式复杂的工作量统计,需要一个灵活扩展的算法或策略,根据字符串进行判断选择计算参数,建立一个字符串和计算权重的对应关系,当工作量的计算方法和参数改变时不需要对系统进行大量修改,只需维护对应关系表即可,这里也用到了“策略模式”的设计思想。
工作量管理系统面向的是多用户、多角色,用户界面逻辑的更改比业务和数据逻辑更为频繁。所以,把数据和表示层分开,再频繁的用户界面的更改,也不影响到数据和业务逻辑。通过经典的MVC 模式来设计及实现,它的基本思想是数据,显示和处理相分离。模型(Model)负责数据管理,视图(View)负责数据显示,控制器(Controller)负责业务逻辑和响应策略。把分离出来的业务逻辑,交由控制器负责,实现视图将请求先发送给控制器,由控制器选择对应的模型来处理;模型返回的处理结果要先发送给控制器,由控制器选择对应的视图来展现,继而形成一个闭环。模型作为一个“观察者”,让控制器和视图在松耦合的状态实现更新,这便是“观察者模式”。
根据图2 教师工作量的系统功能,需要设计多个视图,多个模型,多个控制器才能完成,本文项目按照视图组-控制器组-模型组来构造整个程序框架。
视图组的设计,按照子功能模块做相应设计,如工作量的录入视图、工作量的审核视图等。对于每个视图页面,会有一些如导航、页脚是每个页面共有的,采用模板模式,封装不变的部分,扩展可变部分,提取各个页面的共有代码,而变化(不同)的那部分将作为扩展,共同构成页面视图。对于树形菜单、按钮等各类组件的视图,通过使用“组合模式”,能一致地处理组合视图和普通视图。
模型组的设计,包括工作量表单的增、删、改、查模型、用户表单的增、、删、改、查模型等。一个模型可以对应不同的视图。而对于这些模型,都需要建立在数据库连接的基础上进行数据交换的,因此设计一个数据库连接公共模型,其他如工作量表单、用户表单等对应数据模型把其当做工厂类,调用并创建一个连接即可进一步做数据操作。这里用到了“工厂模式”。再则,对于数据库的增、删、改、查,每个不同表单都用到的相同操作,因此进行封装并且暴露方法接口,既能减少重复的代码,也使得程序结构清晰。这种封装作为公共模块供其他模型使用,实例化之后即可使用,也是用到了“工厂模式”。
控制器组的设计,本文进行了细化,分为两个层次的处理,一是路由设置,二是控制器的处理逻辑。路由中定义了一定的请求分发逻辑,建立数据模型与视图之间的映射关系。部分请求,还要挂载中间件,用于自动执行一些函数。经过路由选择后,交由不同的处理程序,如查询、删除、添加、修改等。这种映射关系,实现了不同的控制器实例响应不同的用户操作视图,即用到了“策略模式”。
如图3 所示,MVC 作为复合模式,本文项目使用到了 “观察者模式”、 “组合模式”、“工厂模式”、“策略模式”、“模板模式”等多种模式。通过MVC 模式的设计思想而构建的项目或者系统框架,一些软件开发人员亦称之为MVC 框架。不同的项目或者系统,根据实际情况,构建的MVC 框架都会有所不同。MVC模式的出现最早可追溯到上世纪的70年代,经过多年发展依然有很强的生命力,如今还衍生出了MVP、MVVM 等模式,但围绕的核心问题还是界面的展示与业务逻辑的分割。本文在MVC 模式具体的应用中,进行了细化,对于视图(组)、控制器(组)、模型(组)的实现上均做了接口化的处理,采用了资源接口的编程方式。在代码实现上,采用先精细化、模块化,后组合构建的方式,亦顺应了当前在云计算发展下兴起的微服务思想。
本文以一个高职院校教师工作量管理系统为例,探析了设计原则、设计模式及其复合关系是如何应用到系统设计及开发中的。设计模式作为最佳的实践代表,对其合理的应用,不应只基于开发者、维护者视角,还应基于用户视角。各类软件系统最终是要面向用户的,用户需求及用户体验是软件设计与开发的终极目标。互联网快速发展,需求变更频繁,要求持续交付,是微服务兴起的关键背景[4]。用户层面,是模式和架构发展的根本驱动力。对于开发者和维护者,使用合适的设计模式,一方面提高协同开发效率,提高模块、框架的复用性,另一方面利于日后的维护、升级、扩展。设计原则、设计模式及其复合关系所体现的思想,对软件系统设计与开发具有重要的指导意义,是理论与实践辩证统一、持续发展的最佳体现。