设计模式及其在管理信息系统中的应用_第1页
设计模式及其在管理信息系统中的应用_第2页
设计模式及其在管理信息系统中的应用_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计模式及其在管理信息系统中的应用王纪平,靳继红西安科技大学计算机系,陕西西安 (710054)E-mail:摘要:好的系统设计来源于对过去成功开发经验的总结和借鉴。使用设计模式就是开发人员将过去项目开发的宝贵经验和当前项目的实际情况相结合,简单方便地复用成功的设计和体系结构。使用设计模式也有助于开发人员很快形成自己的设计思路,设计出一套易于维护,复用度高的系统。本文结合对健身俱乐部管理信息系统的设计和实施对设计模式在管理信息系统中的应用作以介绍。关键词:设计模式;接口;职责;管理信息系统1. 引言一个模式(pattern)

2、是一种方案,利用这种方案,可以完成某项工作。一种模式也是一种途径,通过这种途径,可以达到某个目的。同时,一个模式也是一种技术,为了完成某项工作,有必要利用以前项目中已经总结出来的成功的经验。大建筑师Christopher Alexander在其著作A Pattern Language:Towns,Buildings,Construction一书中提出了建造房屋和建设城市的成功模式,并指出模式是一种获取并交流某个技术领域知识的极好途径。同时也指出合理的利用这些成功的设计模式是达到目的的关键1。软件的设计和实施跟建筑设计与实施一样需要利用这些成功的经验。关于设计模式现在有不下100种,而且这些设计

3、模式都值得学习和掌握,但大多设计模式都是由Design Patterns一书中所介绍的23种模式扩展开的2。这些所有的设计模式对于一个特定的待开发系统并不一定都是有用的,但每一个设计模式都有它所适应的上下文环境,具体的说设计模式是在具体的环境中处理问题的方法,其目的是使那些在特定环境中工作良好的设计得以在相似的环境中被其他人再一次应用。2 设计模式的分类对于设计模式的组织和分类,人们已经提出了多种方案,即可以基于结构的相似性对设计模式进行组织和分类,也可以根据设计模式所要达到的目的进行分类。因为一个设计模式最重要的因素是这个设计模式的目的,即应用设计模式的潜在价值,所以本文根据设计模式的目的来

4、对设计模式进行分类.常用的模式按照其目的可以分为以下几种:2.1 接口(interfaces)型模式一个类的接口是由这个类的某些方法和字段构成的一个集合。其他类的对象可以通过这个集合对这个类进行访问。接口通常表达了方法执行的操作所提供的职责。基于接口的设计模式强调了其所适应的环境,因为环境决定了是否需要定义或重新定义对方法的访问手段,而这些方法可以是一个类的方法也可以是一组类的方法。设计模式是比类要高一个层次的思想。接口型模式有:适配器模式,外观模式,合成模式和桥接模式四种。它们所适应的上下文环境包括其它四类共 23 种设计模式所适应的上下文环境在参考文献2中做了总结,此处不再赘述。2.2 职

5、责(responsibility)型模式把一个类的实例对象的职责与公司的员工的职责进行对比。当咨询人员 P 打电话到 A 公司时,员工 B 接到电话,此时员工 B 就代表了 A 公司。员工 B 就可以把咨询人员 P 的请求委托给一个单独的公司中央权威机构进行集中处理,也可以根据职责链将咨询人员的 问题逐级上报。职责型模式就是将对象的职责集中化或者将对象的职责逐级上报以进行处 理,同时还提供了限制普通对象职责的技术。职责型设计模式有:单件模式,观察者模式, 中介者模式,代理模式,职责链模式和享元模式六种。2.3 构造(Construction)型模式创建一个类时通常要提供这个类的构造函数,并利用

6、这个构造函数完成对类对象的创建。但有时候或者因为不想让客户了解需要对哪个类进行实例化,或者本身对构造函数所需要的参数就不完整,在这种应用条件下就可以使用构造型模式。构造型模式包括:生成器模式,工厂方法模式,抽象工厂模式,原型模式和备忘录模式共五种。2.4 操作(Operations)型模式一个操作是一个服务的规范,并且可以由某一个类的一个实例发出对此服务的请求。操作由一个或多个方法来实现。并且这些方法可以来源于同一个类或者不同的多个类。另一方面来说,对于同一个操作,不同的类可以有不同的实现方法,在高级语言中如果支持多态就可以支持操作型模式的应用。操作型模式包括:模板方法模式,状态模式,策略模式

7、,命令模式和解释器模式共五种。2.5 扩展(Extensions)型模式除了上面已经提及的设计模式,还有三个设计模式分别是:装饰模式,迭代器模式和访问者模式,它们主要目的是用于进行扩展,代码的编写过程本身就是一个扩展的过程, 通过对代码的扩展,可以对软件提供新的特征,有时候扩展后的代码还需要进行重构以改善代码的质量。3 设计模式的选取软件设计模式一般应用于以下两个方面:在软件系统设计的开始阶段就应用设计模式对软件体系结构进行设计; 在系统的体系结构设计初步完成后,对系统另有要求的组件或模块通过加入设计模式使其更加优化、灵活3.模式设计的在软件开发过程中应用步骤如下.步骤1: 对所要解决的问题进

8、行抽象,并划分适当的类型. 步骤2: 根据问题类型选择适合的设计模式.步骤3: 规划问题和匹配模式, 即将所要解决的问题与所选择的设计模式进行比较,找出共性.在所要解决的问题域内考虑元素对应于模式中的类和模式中的各种角色,如果发现选择的设计模式并不合适,返回步骤3,重新进行设计.步骤4: 对选取的模式进行变体,即对模式的原始结构进行修改或扩展,以解决具体问题.步骤5: 设计并细化所需的软件体系结构. 步骤6: 对设计质量进行度量.对于初学者设计模式在软件开发中的应用比较困难,一旦应用,后期开发、修改及维护就很方便和灵活。所以,需要开发人员对每一种设计模式进行理解,并在开发过程中根据具体模式所适

9、应的环境进行应用,初学人员应尽量使用这些设计模式,因为这些设计模式是长期的软件开发后得出的经验的总结,只有经过这样的过程才能使这些设计模式成为自己的设计思想并为以后的设计提供经验积累。本文关于设计模式在健身俱乐部管理系统的设计中就是这样做的。在系统的体系结构设计完成后,甚至在已经结束某个版本的设计后,对系统后续要求的模块通过加入设计模式使其更加优化、更具有可复用性。在这个过程中如果需要对以前的代码进行重行编写,在某种程度上这甚至是必然的,那么,这个代价也是完全值得的。因为一个构架的使用不仅是此次,形成一个构架比构架的使用价值要大的多。4 设计模式在健身俱乐部管理系统中的应用健身俱乐部管理系统采

10、用基于.NET平台的三层结构进行系统设计:表现层,即用户界面部分,ASP.NET以aspx或html页面的形式呈现给用户,表现层主要完成两个功能,获取用户输入并将用户请求的处理结果呈现给用户;控制层,即处理用户请求,调用相应的web服务并根据服务结果生成用户界面;服务提供层,即负责和数据库的交互及数据处理4。设计模式是在控制层和服务提供层运用以提高系统的可维护性和可复用性,以下就是几个典型模式的运用。4.1 外观模式在访问数据库中的应用OleDbReaderOleDbCommandDataTableOleDbConnectionSystem.DataSystem.Data.OledbCreat

11、eTable(sqlSelect:String):DataTable UpdataRow(sqlSelect:String):DataRowDataServices.NET平台为程序员提供访问数据库服务的类称为ADO.NET。而数据访问本身就是一个庞大的话题,但是对于具体的应用系统或者应用系统的某一个子系统来说,经常只需要从一个固定的位置获取少量的数据。而这正是外观模式可以发挥作用的地方,即为一个复杂的系统提供一个简化的接口。本系统的DataServices类就应用了外观模式,为ADO.NET提供了一个简化的接口,如图所示。图 1DataServices 类应用了外观模式,从而把开发者与 AD

12、O.NET的复杂性隔离开DataServices类中提供了CreateTable(mysql:String)方法接收SQL语句返回相应的DataTable对象。UpdataRow(mysql:String)方法接收SQL语句返回相应的DataRow对象。使用以下代码,开发人员可以显示和修改特定表中的数据,从而可以不必考虑ADO.NET 的复杂性,这些代码使用了外观模式:Using System.Windows.Forms; Using Datalayer;Using DataServices;Namespace MyCreateAndUpdataPublic class ShowAndUpda

13、taTable:FormPublic ShowTable(mysql:String)DataGrid mygrid=UI.NORMAL.CreateGrid(); Mygrid.DataSource=DataServices.CreateTable(mysql); Controls.Add(mygrid);Public UpdataRow(mysql:String)DataGrid mygrid=UI.NORMAL.UpdataRow(mysql); Mygrid.DataSource.DataRow(i)=DataServices.CreateTable(mysql); Controls.A

14、dd(mygrid);Public static void main()String mysql;Application.Run(new ShowTable(mysql); Application.Run(new UpdataRow(mysql);4.2 备忘录模式在会员到访模块中的应用4.2.1 基于“堆栈”的备忘录信息表备忘录中的数据是一个列表,这个列表记录了会员到访的信息如到访时间等。可以用备忘录堆栈来维护这个列表,会员到访,每刷一次卡,系统就会创建一个虚拟工厂的备忘录,并将其压入堆栈。而前台员工每单击一次“上一个”按钮,就会从备忘录堆栈中弹出一个会员到访记录。在微软的Microsoft

15、 Word 文档中就采用了这种备忘录模式,Adobe公司开发的Photoshop软件中历史(History)工具栏也采用了备忘录模式如图2。4.2.2 基于“队列”的备忘录信息表本系统当前查询界面(图3)是显示多个会员到访信息,并且显示数目固定,所以采用备忘录队列来维护这个列表,会员每到访刷卡一次就将会员到访信息放到队尾,然后处理队头一名会员,这样保证队列的长度不变。从而可以显示并随时提取固定数量会员的到访信息。在实际应用中可以按照不同的索引对队列中的记录进行显示,本系统根据时间先后进行显示。图2 采用备忘录模式的历史(History)工具栏图3 采用备忘录模式的当前查询界面4.3 生成器模式

16、在新增会员服务中的应用因为新增加一个会员需要提供会员的一些资料,其中一些资料属于必须填写的比如姓 名,会籍类型,健身顾问等,而另外一些信息则是可以提供也可以不提供,比如工作单位, 电子邮箱,家庭住址等。对于新增会员这个服务,我们需要建立NewMember类的一个有效对象的请求,则需要使用一个BuildNewMember类来扫描新增会员界面(图4)提供的数据,一旦发现一个NewMember类的属性,BuildNewMember对象就将这个属性保存下来,最后利用保存下来的属性,构造一个NewMember类的对象,并验证其有效性。MemberInfoParser类的构造函数接收一个生成器传来的信息。

17、Parser()方法从新增会员界面提供的信息中提取NewMember类的属性并将其传递给生成器。图5说明了这个设计中包含的所有类:NewMemberNewMember( name:String, cardstyle:String, adviser:String, workaddr:String, email:String, homeaddr:String)BuildNewMembername:String, cardstyle:String, adviser:String, workaddr:String, email:String, homeaddr:String Build():Reser

18、vation Futurize(:cardstyle):StringMemberInfoParser-_builder:BuildNewMemberMemberInfoParser(:BuildNewMember) Parser(s:String)图 4一个生成器类把一个领域对象内部的构造逻辑提取出来,并且随着扫描的进行,逐步接收 NewMember 的初始化参数。5. 结束语图5 新增会员界面本文通过对多种软件设计模式进行分类介绍,说明了各种设计模式的使用环境,并介绍了设计模式在具体开发环境中的使用步骤。通过在健身俱乐部管理系统的设计中使用设计模式极大地提高了系统的可扩展性、可复用性和易维护

19、性。该管理系统的多个版本已经在多个俱乐部中使用了两年多时间,运行一直很稳定,给管理和操作人员带来了极大的方便,极大的提高了工作效率。参考文献1颜炯译C#设计模式M. 北京:中国电力出版社,2005.7.2李英军,等译设计模式M.北京:机械工业出版社,2005.7.d 3刘海岩,锁志海,吕青,梁建龙设计模式及其在软件设计中的应用研究.西安交通大学学报,2005.39(10).1043-1046.4吕林涛,王峰,万经华基于五层体系结构的WEB应用模型J.西北大学学报, 2005.12.dDesign Patterns and Application of Design Patterns in MISWang JipingDepartment of Computer,Xi an Universit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论