策略设计模式在实验耗材Web系统中的应用

2020-06-19 08:45虞泉
软件导刊 2020年4期

摘要:随着互联网、大数据、人工智能等技术的发展,对软件可扩展性、可维护性、可复用性等提出了越来越高的要求。为更好地构建一个可扩展性、可维护性、可复用性较高的低值实验耗材管理Web系统,结合系统功能,以Django框架为基础,将策略设计模式应用于系统设计中。策略设计模式加快了系统开发速度,方便系统功能扩展与维护,代码复用性高,降低了系统耦合性,增强了系统内聚性。经测试,该系统运行可靠,提高了实验耗材管理效率。

关键词:策略设计模式;实验耗材管理;Django框架

DOI: 10. 11907/rjdk.192507

开放科学(资源服务)标识码(OSID):

中图分类号:TP319

文献标识码:A

文章编号:1672-7800(2020)004-0189-05

0 引言

随着信息技术的不断发展,利用现代信息技术手段,特别是充分结合大数据技术、移动互联技术、数据库技术等物联网技术,能为实验耗材管理提供技术支持,以更好地发挥低值耗材的经济效益;新技术的出现,导致耗材管理业务需求不断变化。耗材管理涉及实验项目种类多,实验器材数量大,对耗材管理的完整性、灵活性要求高,耗材查询、盘点、统计等基本功能处理繁锁,程序开发工作量也相应增加。实验耗材Web管理系统是“资产管理系统”的重要组成部分,为学校资产管理提供便捷、强大的管理方案,耗材采购、入库、出库、盘点、借出、归还等功能与资产管理有共同点。但是,由于耗材自身消耗较大,其与传统资产管理有很大区别。因此,实现耗材Web管理系统与资产管理系统之间数据共享及功能维护是程序设计的重点。

实验耗材Web管理系统管理对象种类繁杂,业务量大,涉及到耗材管理、教学管理、实验设备管理、资产管理、采购管理等业务。为实现系统使用简单、方便的目标,可充分利用物联网技术、移动互联技术和人工智能技术,实现相关业务功能。物联网、移动互联网与人工智能技术的日新月异,在为耗材管理提供更好技术支持的同时,其功能业务也需作适应性改变。耗材管理业务需求主要随物联网、人工智能新技术的变化而变化,管理系统智能化、个性化要求提高,软件设计必须重点考虑可维护性、可扩展性、可重用性[1],使系统功能适应用户环境,即时维护和扩展,最大程度降低软件设计随功能变更而增加的维护难度。

针以上问题,本文对系统功能需求及未来功能扩展进行全面分析与预测,设计一种功能模块可扩展性强、维护性高及代码重用性好的实验耗材Web管理系统,减少软件开发成本,缩短开发时间,提高系统的维护性、扩展性,以提高软件质量和开发效率。

1 耗材管理系统关键技术

( l)Django是一个开源的Web应用框架,其MTC模式与经典MVC框架模式相对应[2],使用Python语言设计完成。Django可以很好地使用Python功能强大的第三方插件,甚至可以在其平台上方便地开发新工具包,主要目的是简便、快速地开发数据库驱动的Web系统。Django可以很好地适配第三方插件,多个组件可以很方便地以插件形式服务于整个框架,使Django具有很强的可扩展性。

(2)设计模式。描述如何利用面向对象的基本概念和机制解决可扩展的软件设计中常出现的问题,并针对设计问题给出可复用方案[3-6]。此解决方案对反复出现的设计结构进行识别和抽象,是软件设计人员在面向对象软件设计中成功解的记录与提炼,如观察者模式、工厂模式、经典MVC模式等。通过使用这些设计模式,便于简化软件设计过程,提高软件设计效率,降低软件复杂度[7-12]。

(3)策略模式。它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。利用此模式可使算法的变化独立于使用客户,把算法使用责任和算法实现分割开来,以降低代码的耦合性。

(4)适配器模式。目的是将一个类接口转变为客户端目标接口,从而使因不匹配而无法工作的两个类能一起工作,适配器又分为类适配器和对象适配器[13-14]。

2 实验耗材Web管理系统业务分析

对实验耗材Web管理系统业务进行分析,系统功能模块如图1所示。

实验耗材Web管理系统主要功能是实现耗材采购管理、耗材管理、实验室管理、系统维护管理。

(1)系统维护管理是耗材管理的基础,主要完成基本信息管理、二维码管理、耗材信息管理、耗材库管理。其中,基本信息管理主要是系统用户管理和相应权限管理,包括实验室管理员和师生用户的分级管理。因实验耗材是分部门、分院系、分实验使用的,故对耗材使用者管理需精细到部门管理员、院系管理员、实验室教师及学生,达到对耗材使用的可追溯性。管理员对系统中的数据拥有增加、删除、修改、查询权限,教师拥有对实验及相关耗材的申请、领取、回库等权限,学生仅有耗材的受限领取权限。耗材信息管理主要是对耗材基本信息的管理,如耗材规格参数、耗材功能用途信息、类别、数量等。耗材库管理主要实现耗材分类存放管理,主要对耗材存放的实验室、柜子、箱子等信息进行管理。管理员对二维码及条形码进行管理,对系统涉及到的所有二维码及条形码进行统计管理。

(2)耗材管理。主要用于耗材使用信息管理,这是Web管理系统的核心功能,是耗材采购管理的重要依据,也是耗材信息追踪的重要环节。耗材管理主要包括耗材申领管理、暂存管理、回库管理、转移管理、盘点管理几部分,是对耗材使用人、耗材消耗过程、耗材使用详细情况等信息戳的记录,为耗材统计分析提供依据。

(3)实验室管理。管理员完成實验室基本信息量管理、课程基本信息管理、实验实训项目管理。其中,实验实训项目管理是此部分的重要功能,实验实训项目耗材要求是整个耗材管理系统的依据和起点。

(4)耗材采购管理。系统根据实验条件、实验实训项目及参训学生总数情况,计算统计一年一度的耗材需求量。各部门及院系管理员根椐教师申报的实训项目及库存,完成耗材计划预算、采购申请、招标管理、采购合同、供货及验收入库等管理,最终完成耗材库存管理。

3 策略设计模式技术分析

为实现客户使用一组功能业务而不关心这些功能业务差异,仅需使用它们共同的接口或抽象类即可完成这些不同功能的使用,实现业务需求的改变或增加,即实现对一组功能业务的单独维护与扩展,而不用修改客户端功能业务,以提高代码的可维护性和可扩展性,降低客户端模块与功能业务的耦合。策略模式可实现算法使用与具体算法之间的松耦合,提高软件可维护性。策略设计模式结构如图2所示。

策略设计模式功能业务有3个重要的类15-16],其角色如下:①环境功能业务类( Context):系统调用的功能业务;②抽象功能业务策略接口( AbstrctStrategy):需要适配统一抽象功能,为环境功能业务类提供统一的访问接口;③具体功能业务策略类组( ConcreteStrategy):-组核心功能业务,实现相关具体功能业务。

对于策略设计模式,主要适用如下应用设计:在系统中有许多类C oncreteStrategy,这些类的业务行为各不相同;系统功能业务需要在几种算法中,或可能未来需要的几种算法中选择适用的某一种算法,这样可以把这些不同算法在不同类中具体实现或未来再实现;这些算法具有统一接口AbstrctStrategy,司使用面向对象的多态原则服务于系统使用类C ontext。使用此统一接口,选择应用具体算法类,以屏蔽不同算法中具体数据或算法差异,避免接触与算法有关的复杂数据,使接口调用简单化,实现算法细节[7]。

策略设计模式功能算法具有较强的独立性、复用性和可扩展性。模式提供了一种替代继承的设计方法,以保持继承的优点即代码复用,增强设计维护的灵活性,即算法独立性和可扩展性,避免在程序中使用多重条件转移语句,使设计遵守高内聚、低耦合原则。

4 策略設计模式应用

4.1 实验耗材Web管理系统业务设计分析

在实验耗材Web管理系统中,处理每种基本模块都会涉及信息的4大处理功能,即信息查询处理、信息增加处理、信息修改处理、信息删除处理,这些信息处理功能分布在不同的功能模块里,涉及信息数据不一样,处理方式和算法也不尽相同。在耗材信息管理查询中,仅对耗材基本信息进行查询;在耗材申领管理查询时,查询的信息有耗材基本信息、实验实训项目信息、耗材库信息、课程信息、实验室基本信息、暂存信息、供货信息等;耗材管理查询涉及信息简单,耗材申领管理查询涉及信息多,所以设计实现处理的过程、复杂度不一样。

同理,增加处理、修改处理、删除处理,在不同功能模块中,涉及同种处理功能的信息不一样,算法的实现就会存在差异。设计实现时,这些模块可实现耗材基本信息管理、二维码管理、耗材信息管理、耗材库管理、申领管理,暂存管理、回库管理、转移管理、盘点管理、实验室基本信息量管理、课程基本信息管理、实验实训项目管理,以及耗材计划预算、采购申请、招标管理、采购合同、供货及验收入库等等,增加处理、修改处理和删除处理,需根椐模块功能的不同而采用具体关联算法处理。

如果设计实现同种功能使用分支结构,会导致大量代码重复,结构复杂,后期维护、扩展难度增大。且随着新技术的更新和使用,模块新功能与旧功能有差异,系统维护工作量成倍增加。为解决此问题,可采用软件设计模式的策略模式和适配器模式,屏蔽具体模块及数据差异,以降低程序复杂度,使代码结构合理、简单。

4.2 策略设计模式应用分析

通过策略设计模式技术分析,结合以上实验耗材Web管理系统功能业务分析及Django框架实现方式,系统信息4大功能处理抽象为策略设计模式的信息功能业务策略抽象类AbstrctStrategy。结合Django框架,根据实际设计需要,重新命名为InformationHandlelnterface,对应设计4个抽象方法,命名为informationQuery()、informationAdd()、informationModify()、informationDelete().

具体业务功能为申领管理、耗材信息管理、二维码管理、基本信息管理、实验实训项目管理、课程基本信息管理、耗材库管理、暂存管理、回库管理、转移管理、盘点管理、实验室基本信息量维护,耗材计划预算、供货及验收入库等,设计为具体功能业务策略类组ConcreteStrategy。如申领耗材管理类ApplyConsumablesHandle、耗材信息管理ConsumablesInformationManage、基本信息管理子模块功能中的用户基本信息管理功能为UserInforManage、用户权限管理功能为UsePrivilegeManage、实验实训项目管理功能设计为ExperimentManage、课程基本信息管理CourseBase-Manage等具体策略业务功能,以实现接口InformationHan-dlelnterface中的统一抽象方法,完成系统的具体业务。在实验耗材Web管理中需根据具体阶段业务使用具体功能业务策略类,完成具体的系统功能。实现时重新命名为InformationHandleManage。当具体业务功能需扩展,仅需动态地选择增加业务功能的查询、增加、修改、删除操作,大大提升了系统扩展性。

策略设计模式在实验耗材Web管理系统的部分设计结构如图3所示。

InformationHandlelnterface是实现策略设计模式抽象功能策略模块接口,抽象定义实现实验耗材Web系统中统一业务接口,即信息增加、信息修改、信息删除、信息查询。InformationHandleManage实现了策略设计模式中环境功能模块类,是使用功能操作服务的类,据具体实现功能业务要求选择使用相关特定功能,具体使用某一个Infor-mationHandlelnterface的实现类对象,完成系统不同业务功能,这样可避免使用分支语句,降低程序可读性,且也不用因减少或增加业务功能而增加代码维护难度。Interface-Handlelnterface的子类是具体操作策略,如在申领管理的实现类ApplyConsumablesHandle、基本信息管理中用户基本信息管理的实现类UserInforManage、耗材信息管理的实现类ConsumablesInformationManage等不同类的具体实现;若需增加新的业务功能,仅需添加相关的InformationHan-dlelnterface子类即可,这样可提高设计的扩展性,最大程度减少系统维护。

4.3 策略设计模式实现

据德宏师范高等专科学校信息学院实验耗材Web系统设计实际情况,本文采用Django框架完成系统设计,以下是实现功能的部分Pvthon代码。

4.3.1 环境功能业务在实验耗材Web系统中应用实现

环境功能使用类InformationHandleManage,通过初始化一_

init一一(self,information_handle)或设置方法setlnforma-tionStrategy( self,information_handle),创建或更改具体的业务功能操作对象concreteInfoHandleStrategy,达到选择使用具体业务类目的。通过使用此对象中的4个公共服务方法getlnformation()、updatelnformation().addlnformation()、deletelnformation(),实现具体功能。InformationHandleMan-age的部分实现代码如下:

class InformationHandleManage:

def一一init一一(self,inform ation_handle):

self.一一concreteInfoHandleStrategy =information_handle

def setlnformationStrategy( self, information_handle):

self.一一concreteInfoHandleStrategy=information_handle

def getlnformation( self):

return self.~一concretelnfoH andleStrategy.inform ationQ ue ry()

def updatelnformation( self):

self.一一concretelnfoHandleSirategy.informationModify()

def addlnformation( self):

self.一一concreteInfoHandleStrategy.informationAdd()

def deletelnformation( self):

self.一一concreteInfoHandleStrategy.informationDelete()

4.3.2 抽象功能業务策略接口实现

Pvthon语言没有接口,但是Python提供了抽象类,且Pvthon的类支持多继承,所以可以使用抽象类实现接口功能,本系统使用Pvthon的抽象类功能实现系统抽象业务策略接口InformationHandlelnterface,实现代码如下:

class InfromationHandlelnterface():

def informationQuery( self):

raise NotImplementedError

def informationAdd( self):

raise NotImplementedError

def informationModifv( self):

raise NotImplementedError

def informationDelete( self):

raise NotlmplementedError

在抽象类中定义统一操作的增加、修改、删除、查询4个抽象方法,即informationAdd( self)、informationModifv( self)、informationDelete( self)、informationQuerv( self),为环境功能业务使用类InformationHandleManage提供服务,同时为申领管理、耗材信息管理、二维码管理、基本信息管理、实验实训项目管理、课程基本信息管理、耗材库管理、暂存管理、回库管理、转移管理等功能提供统一接口。

4.3.3 实验耗材Web系统具体功能业务策略类实现

具体业务功能策略类组实现InfromationHandlelnter-face统一接口,即可为环境功能业务类提供服务。以申领耗材功能ApplyConsumablesHandle为例,此类继承Infro-mationHandlelnterface,重载informationQuery、information-Add、informationM odify、informationD elete方法,实现耗材的申领信息显示,进行获取、申领耗材,申领耗材修改管理、申领耗材取消。ApplyConsumablesHandle实现代码如下:

class ApplyConsumahlesHandle( InfromationHandlelnterface):

def informationQuery( self):

info_handle=UseManagement()

displayinfolist,

dispconmlist=info_handle.readExperC on- mD etail( self.apply_id)

return displayinfolist, dispconmlist

def informationAdd( self):

info_handle=UseManagement()

if self.apply_add_flag= =self._APPLY_ALL_HAND LE:

info_handle.AddAlllnfo rm ation( self.consumable_list)

else:

info_handle.Addo nelnformation( self.consumable_list [0l)

def informationModify( self):

info_handle=UseManagement()

info_handle.Modifylnform ation( self.consumable_list[O])

def informationDelete( self):

info_handle=UseManagement()

info_handle.D eletelnformation( self.apply_id)

耗材信息管理、二維码管理、基本信息管理、实验实训项目管理、课程基本信息管理、耗材库管理、暂存管理、回库管理、转移管理等功能及扩展功能实现,类似申领耗材管理功能ApplyConsumablesHandle的实现,主要实现Infro-mationHandlelnterface中的4个抽象方法,对这些功能的维护,也主要是对这4个抽象方法实现的维护。所以在实验耗材Web系统中功能维护及新功能的增加,仅是对这些具体业务功能策略类的修改和增加,而不用去修改抽象功能业务策略类InfromationH andlelnterface和环境功能业务类InformationHandleManage中的代码,提高了可维护性,降低了功能模块的耦合度。

5 设计效果

本文以德宏师范高等专科学校信息学院实验耗材Web系统设计为例,结合策略设计模式、Django框架和MySql数据库技术完成系统设计。使用Django框架技术常见的三层结构设计,各层使用模块方法独立,实现申领耗材管理、耗材信息管理、二维码管理、基本信息管理、实验实训项目管理、课程基本信息管理、耗材库管理、暂存管理、回库管理、转移管理等功能。策略设计模式的使用,使系统方便实现业务功能扩展,降低模式间的耦合度。在系统开发各阶段,维护方便,节约时间,降低了开发费用。

6 结语

策略设计模式,主要为系统功能需求变更与增加系统设计应用场合提供一种有效的软件设计模式。本文针对低值实验耗材Web管理应用实际情况,充分利用策略设计模式优点,成功地应用到系统设计中。实践表明,应用策略设计模式能方便地扩展系统功能,增强系统的维护性,提高系统开发效率,降低设计费用,为同类设计问题提供了更好的参考。在代码重用性方面,若能结合适配器模式或其它设计模式,可进一步改善系统代码的重用率。

参考文献:

[1]张伟,梅宏.面向特征的软件复用技术——发展与现状[J].科学通报,2014,59(1):21-42.

[2] 刘红霞,陆文迪.改进的MVC设计模式的研究与应用[J].计算机工程与科学,2015,37(9):1688-1691.

[3]段群,吴粉侠,欧阳宏基.软件设计模式在目标考核系统中的应用[J].自动化技术与应用,2017,36(9):60-63。

[4]钟睿.设计模式在软件设计中的应用[J].电子技术与软件工程,2018( 14):27-31.

[5] 庄立伟,卫建国,毛留喜.软件设计模式在农业气象系统开发中的应用[J].应用气象学报,2011,22(5):162-174.

[6]刘海岩,锁志海,吕青,等.设计模式及其在软件设计中的应用研究[J].西安交通大学学报,2005( 10):1043-1047.

[7]杨静.设计模式在敌我识别信号侦测显控软件的应用[J].电子设计工程,2019,27( 4):38-42.

[8]蔡岳良.计算机软件设计教学中系统工程方法的应用[J].软件导刊(教育技术),2017,16(3):19-20.

[9] 刘凌云.观察者模式在面向抽象编程中的应用[J].计算机与数字工程,2016,44(8):1474-1477,1522.

[IO] 葛萌,欧阳宏基.工厂设计模式的研究与应用[J].计算技术与自动化,2017,36(2):136-140.

[11]唐永瑞,张达敏.基于Ajax与MVC模式的信息系统的研究与设计[J].电子技术应用,2014,40(2):128-131.

[12]杨斌,张卫冬,张利欣,等.基于Ajax的Observer模式客户端研究[J].计算机工程,2010,36( 24):4-5,8.

[13]戚利娜.适配器模式及其应用[J].电子测试,2017( 11):112-113.

[14] 罗锦坤,元昌安.软件审计适配器模式研究及应用[J].计算机技术与发展,2014,24( 12):183-187.

[15] 马媛,赵智宝.基于策略模式数据粗化算法类库设计与实现[J]软件导刊,2009,8(12):44-46.

[16] [美]ERICH CAMMA.设计模式:可复用面向对象软件的基础[M].北京:机械工业出版社,2019.

(责任编辑:杜能铜)

作者简介:虞泉(1982-),男,硕士,德宏师范高等专科学校信息学院、云南师范大学民族教育信息化教育部重点实验室讲师,研究方向为软件开发、数据分析。