面向接口的业务模型结构设计方法

2015-12-20 06:54琼,徐
计算机工程与设计 2015年9期
关键词:设计模式计费代码

周 琼,徐 斌

(大连海事大学 管理科学与工程系,辽宁 大连116026)

0 引 言

结构化方法基本要点是:自顶向下,逐步求精,模块化设计。自顶向下的核心本质是 “分解”,它将相对复杂的大问题分解为简单的小问题,对每一个小问题进行精确、定量的描述。

结构化分析法将任何信息处理过程看作是将要输入数据变换成所要求的输出信息的装置,因此数据流分析是需求分析的出发点。结构化分析使用数据流图、加工说明和数据字典等来构造系统的需求分析模型[1]。面向对象方法则是用自然贴切的思维考虑问题,以对象为中心,运用类、继承、聚合、关联、消息和封装等概念来构造软件系统。结构化分析设计主要是针对系统需求明确的软件开发,一旦中间需求改变了,则需要重新对其进行分析和设计;而面向对象则不同,当需求发生变化时,只须修改相应的部分和连接接口[2]。

计算机软硬件发展迅速不断地更新换代,各种复杂的软件系统相继被开发,软件系统规模不断扩大,复杂性相应增加,这就相应产生了对业务模型进行合理抽取的需求以及面向接口来编程的需求,本文研究接口为基础的业务模型的结构设计方法,通过选择合理的设计模式来对业务模型进行抽取,利用该思想可以顺利实现结构式分析向面向对象设计的演化和过渡,打破两者不可兼容的传统思维。比如,各大系统的计费问题,由于各种系统计费规则的多样性和繁复性,目前也没有能够具体参考的计费模板,各种计费的实现非常简陋而且维护起来极其复杂,相互之间也不可复用,漏洞百出,面向接口来进行实现则克服了传统开发存在的诸多弊端。以接口为导向结合设计模式的思想使得系统具有良好的可扩展、可复用以及易维护的特性。如何应用设计模式的思想面向接口来对业务模型进行抽象和提取是本文的研究重点。这也对以后的各种类型信息系统的实现具有十分重要的理论与实践意义。

1 传统的结构式分析方法

本文采用MVC 模式的思想,MVC 模式由模型 (model)、视图 (view)及控制器 (controller)3 个部分组成,模型指的是业务模型,主要负责数据库数据的处理,视图指的是用户界面,主要负责前台界面的显示内容,控制器则是主要负责界面与数据的交互[3,4]。使用MVC 的目的是将数据层和表现层的实现代码分离开来,从而可以使同一个程序有不同的表现形式,进而提高程序的可读性和代码的复用性,控制器存在的目的是确保模型和视图的同步,一旦模型改变,视图应该同步更新,使用MVC 模式可以降低程序开发的风险,从而构造良好的松耦合的构件[5-7]。

以某省渔业船舶检验系统的计费问题为例来进行说明,该项目目前包含22种计费小项 (将来很可能会扩充),总体计费思想是:各项费用=基数×系数;总费用=各项费用之和。一般最常见的对业务问题的处理过程如图1所示。即传统的MVC模式的思想,操作页面窗体是程序的界面,业务流程控制负责所有的处理流程,实例类库模型则负责一些存库查库的操作。

图1 传统的对计费业务的处理过程

由此想到利用判断表来对计费进行简化,初始的判断表如表1所示。由于数据量繁多,图中只是截取了前后两端来进行展示。

表1 初始判断

船舶构造费简化判断见表2。

表2 船舶构造费简化判断

轮机费简化判断见表3。

表3 轮机费简化判断

由判断表可知,船舶构造费用只与总吨位和船舶系数以及冰区加强相关,轮机费用只与功率、变速齿轮和推进器数以及侧推进装置相关,由此每一小项各自维护自己的计费,所有的功能运算类都写在计费业务里,如图2所示。具体的计费功能的实现方法是比如船舶构造,基数和系数都写在自己的类中,一个小项目一个计费类,又比如其它项目如轮机这一小项的计费,就是在整个计费功能的流程控制中增加了一个轮机类来实现,但是这种方法维护起来特别麻烦,基数和系数的些许变动都需要大量的去修改代码,而且将基数和系数都写在程序里的缺点就是其它系统也没法复用,遇到别的系统的相关的计费问题就必须重新写代码。

2 设计模式的选择及其特点

图2 利用判断表分析后对船舶计费的处理过程

设计模式描述了软件设计过程中某一类常见问题的一般性解决方案,它可以使开发人员更加简单方便地复用成功的设计和结构体系[8]。设计模式的概念和思想非常重要的,它并不只是一种具体 “技术”,它讲述的是解决问题的思想,展示的是接口或抽象类在实际案例中的灵活应用与智慧,使用设计模式能使代码真正的工程化,让代码更容易被理解、保证代码的可重用性和可靠性,使新系统开发者更容易理解其设计思路,保证系统的灵活性和可扩充性[9]。

对业务模型进行抽取主要会用到以下一些常见的设计模式:

(1)工厂模式:工厂模式有助于代码的设计,可以将代码模块化,是创建型模式中一类非常重要的模式,工厂模式提供创建对象的接口,负责将大量有共同接口的类实例化,主要有简单工厂模式,工厂方法模式,抽象工厂模式3种形态[10]。

(2)单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例可以节省不必要的内存开销,屏蔽对象创建的复杂性。

(3)适配器模式:适配器模式是一种非常广泛的结构型设计模式,其主要意图是将一种类的接口转换成另一种客户所希望的接口。适配器模式的目的是要改变已有的接口,使得原本因接口不兼容而无法一起工作的类可以在一起工作[11]。

(4)观察者模式:又称发布-订阅模式。观察者模式定义对象间的一种一对多的依赖关系,将观察者和被观察者对象分离开来,以便当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新自身状态,通常被用来实现事件处理系统[12]。

3 面向对象的设计方法

传统的对业务的设计方法存在着不足之处,例如一旦业务需求变更,修改起来的工作量较大,并且复用性不强,最重要的是各种职能类并行存在,结构很乱。基于此本文提出了基于接口的业务模型的结构设计方法,如图3所示。就是将业务流程控制抽象成一个接口,然后基于此接口进行扩展,将业务流程进行拆解,分为业务控制扩展1,2,3等等,同时也将实体类库模型进行抽象,抽象为一个接口,查表存库的操作则是基于此接口进行,这种设计方案最大的优点在于将业务流程的处理和访问数据库的操作提炼为一个接口,所有的扩展都是在此基础之上的,相对于操作界面来说后面所有的处理都是基于接口的,这样操作者只需要控制好所需数据的流入流出即可,而无需知晓具体的实现方式。在设计过程中以接口为导向,对业务问题进行分析,采用合理的设计模式或者是几种经典的设计模式的组合来提出一套完整的解决方案,以接口为基础来研究系统或者是业务模型的结构设计方法,从而实现一种用于解决在特定环境下重复出现的特定问题的解决方案,展示接口或抽象类在实际案例中的灵活应用,同时具有良好的可移植性和可复用性,方便应用到其它领域。

具体到某省渔业船舶检验计费系统,本文结合设计模式和面向接口编程的相关概念,为计费这个小系统做一套混合设计模式,来减轻编写代码的工作量,如图4 所示。将上述计费功能控制部分抽象为一个接口,计费功能的实现以及计费规则是对这一接口的扩展,同样的关于数据库的操作也抽象出来一个接口,具体的对各个库表的操作则是实现了这一接口。这样把整个计费流程的控制和对数据库的操作抽象为了一个接口,业务需求变动时只需基于接口进行扩展而无需变动接口,站在操作页面的角度就是说只需知晓所需数据的流入流出,这种基于接口的解决方案能被其它系统方便复用。

图3 基于接口的业务模型的结构设计方法

图4 基于接口的对船舶计费业务的结构设计方法

其中如图5所示是计费功能实现部分的结构,抽取一个父类FeeBase,父类中的GetFee()专用来实现各项费用的计算,这样有多少个计费小项继承父类扩充就可以了,比如此时若再增加其它项目的计费只需继承FeeBase类并实现即可。

图5 计费功能实现部分的结构

关于计费规则部分的结构在渔船系统中主要指的是关于计费基数部分的维护,如图6所示是一个通用的数据结构CRCostData来表示计费所用的基数的类型,使用最通用的object类型,根据具体项目的计费需求可扩展为最常见的int型和double型的收费,有的系统可能需要一些加班费这时也可扩展为按时间的datetime型进行收费,渔业船舶检验系统用到的是double型的收费。如图7所示是为基数的维护工作设计的模式结构,该结构中包含一个通用的数据结构CRCostData,这项对基数数据的维护同样用到了设计模式中最常见的工厂模式,这样前端代码只需返回一个父类类型而无需具体知晓调用的具体算法。

图6 计费规则部分的数据类型

图7 计费规则部分

其中,计费规则部分的实现方法用到了设计模式中的工厂模式,工厂模式有助于代码的设计,可以将代码模块化,提供创建对象的接口,工厂模式的应用让系统具有非常大的灵活性且方便扩展。同样的应用于其它领域可以根据具体需要用单例模式、适配器模式或者观察者模式等等,也可能是多种经典的设计模式的组合。

这样,前端代码实现起来将会非常简单,以一小项如船舶构造为例,如图8 所示是前端使用到的数据结构,item 指计费项目名称,baseValue指该项目的基数,factor指该项目的系数,fee则是单项的费用,具体实现代码为:

图8 前端用到的数据结构

此时若是增加另一小项如轮机的计费,则代码修改起来非常灵活,只需增加如下几行即可。

4 结束语

这种用于计费的设计模式的设计有非常重要的实践意义,使用这种混合方式的设计模式进行计费的方式大大简化了信息系统的计费实现,它将计费规则进行抽象,将计费规则模块化使得程序实现起来条理清晰且便于维护,而且由于对基数和系数维护的分离以及对具体总费用的抽取,可移植性、可复用性很高,可以方便应用到其它系统不仅仅是渔船行业的计费,而且由于其设计的合理性,代码的修改量极少,重构起来的工作量也不大。

同样的,面对其它业务问题时也是如此,应用设计模式的思想面向接口来对业务模型进行抽象和提取,在设计过程中以接口为导向,对业务问题进行分析,采用合理的设计模式或者是几种经典的设计模式的组合来提出一套完整的解决方案,从而实现一种用于解决在特定环境下重复出现的特定问题的解决方案。利用接口来对业务逻辑进行分隔使整个业务逻辑依赖于严格定义的接口而非具体实现,可以顺利实现结构式分析向面向对象设计的演化和过渡,通过接口将结构式思维和面向对象技术结合在一起,充分发挥两者的优势,从而减少耦合,提高系统的灵活性。

[1]ZHANG Yaomin.Method of structured design in software engineering [J]. Modern Electronics Technique,2012,35(16):39-42 (in Chinese).[张耀民.软件工程中的结构化设计方法 [J].现代电子技术,2012,35 (16):39-42.]

[2]TAN Linping.Depth analysis of process-oriented and objectoriented [J].The Science Education Article Collects,2013(237):89-90 (in Chinese).[谭林平.深入解析面向过程和面向对象 [J].科教文汇,2013 (237):89-90.]

[3]LI Zhi,JIA Kebin,LI Zhenzhen,et al.Design and implementation of jewelry sell system based on.NET MVC framework[J].Computer Applications and Software,2013,30 (3):186-189 (in Chinese). [李志,贾克斌,李真真,等.基于.NET MVC 架构的网上珠宝销售系统的设计与实现 [J].计算机应用与软件,2013,30 (3):186-189.]

[4]SUN Jin.Design and implementation of bank credit management system based on MVC pattern [D].Dalian:Dalian University of Technology,2013 (in Chinese).[孙瑨.基于MVC模式的银行信贷管理系统设计与实现 [D].大连:大连理工大学,2013.]

[5]ZHOU Hui,REN Haijun,MA Liang,et al.MVC design pattern and it’s application in development of information systems[J].Software Guide,2012,11 (10):120-122(in Chinese). [周辉,任海军,马亮,等.MVC设计模式及其在信息系统开发中的应用[J].软件导刊,2012,11 (10):120-122.]

[6]LU Junwei,CHANG Lin,CHEN Yunkun.MVC Design pattern and ASP.NET MVC framework research [J].Computer Knowledge and Technology,2010,6 (19):5160-5162 (in Chinese).[卢俊玮,常琳,陈昀锟.MVC模式与ASP.NET MVC框架的技术研究[J].电脑知识与技术,2010,6 (19):5160-5162.]

[7]LAI Yingxu,LIU Zenghui,LI Maomao.Application study of B/S based on MVC design pattern [J].Microcomputer Information (Management and Control Integration),2006,22(10):34-36 (in Chinese).[赖英旭,刘增辉,李毛毛.MVC模式在B/S系统开发中的应用研究 [J].微计算机信息 (管控一体化),2006,22 (10):34-36.]

[8]WU Guangming.Application of design patterns in globalised software development [J].Computer Applications and Software,2014,31 (1):9-10 (in Chinese).[武光明.设计模式在全球化软件开发中的应用 [J].计算机应用与软件,2014,31 (1):9-10.]

[9]CUI Le.Several classical design patterns combination frame of reference [J].Computer Knowledge and Technology,2004(14):79-82 (in Chinese).[崔仂.几种经典设计模式组合的参考框架 [J].电脑知识与技术,2004 (14):79-82.]

[10]CHEN Hua’en.Study on abstract factory pattern of the JAVA design pattern [J].Computer Knowledge and Technology,2010,6 (9):2245-2246 (in Chinese). [陈 华恩.JAVA 设计模式研究之抽象工厂模式 [J].电脑知识与技术,2010,6(9):2245-2246.]

[11]PENG Yang,PENG Junfeng.Application and research of the adapter pattern on system interfaces [J].Computer Knowledge and Technology,2008,3 (24):1346-1348 (in Chinese).[彭阳,彭军锋.适配器模式在系统接口中的应用与研究 [J].电脑知识与技术,2008,3 (24):1346-1348.]

[12]CHEN Qing.The research and application on design patternoriented MDA [D].Shanghai:Shanghai Normal University,2013 (in Chinese).[陈清.面向设计模式的模型驱动框架的研究与应用 [D].上海:上海师范大学,2013.]

猜你喜欢
设计模式计费代码
5G网络独立组网中融合计费方案的研究
“1+1”作业设计模式的实践探索
基于云计算和微服务架构的高速公路计费系统
三维协同设计模式下的航天项目管理实践与展望
生活中的分段计费
交通机电工程设计模式创新探讨
创世代码
创世代码
创世代码
创世代码