




已阅读5页,还剩52页未读, 继续免费阅读
(计算机软件与理论专业论文)设计模式在web系统开发中的应用研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 使用n e t 和j 2 e e 等开发平台及各种w e b 开发框架来开发w e b 应用系统, 可降低开发的费用和复杂性,降低系统部署与维护的开销,提高系统的开发速度 和质量,但难以有效地复用系统设计的结果。现有的w e b 系统中也普遍存在可 复用程度低、可维护性差等问题,且重构成本较高。设计模式使系统开发者可以 更加简单方便地复用成功的设计结果,如何选取和应用设计模式以帮助w e b 应 用系统的开发和重构是w e b 系统开发者需要解决的重要问题。 本文首先分析了w e b 应用程序开发和设计模式研究与应用的现状,综述了 设计模式和反模式的基本概念与相关技术,并分析和探讨了面向对象设计的基本 原则。然后,使用u m l 描述了几种常用的设计模式,分析了其内涵与侧重点, 并在此基础上提出了选取和应用设计模式的策略。最后,总结了五种w e b 应用 程序设计与实现中的反模式,并选取合适的w e b 开发框架和设计模式,提出了 重构方案。 面向对象设计的基本原则是更为深层、更具普遍性的设计指导原则,是理解 和应用开发框架和设计模式的理论基础。设计模式的应用策略总结了应用设计模 式进行系统设计和重构的一般规律。提出的反模式总结了w e b 系统开发中在分 层结构、数据库连接优化、用户访问控制和算法应用策略等方面存在的典型问题, 其解决方案提高了系统的灵活性、可复用性与可维护性,对应用设计模式进行 w e b 系统的开发和重构有指导意义。 关键词:设计模式,反模式,面向对象设计,w e b 开发框架,m v c a b s t r a c t t h ea p p l i c a t i o no fd e v e l o p m e n tp l a t f o r m s ( s u c ha s n e ta n dj 2 e e e t c ) a n dw e b d e v e l o p m e n t f r a m e w o r k si nw e bs y s t e m d e v e l o p m e n t c a r lr e d u c ec o s t so f d e v e l o p m e n t ,d e p l o y m e n tm a dm a i n t e n a n c e ,a n di m p r o v ed e v e l o p m e n ts p e e d a n dt h e q u a l i t yo ft h es y s t e m h o w e v e r , i ti sd i f f i c u l tt or e u s et h ed e s i g nr e s u l t se f f e c t i v e l y l o t so ft h ee x i s t i n gw e bs y s t e m sa r el o wr e u s a b i l i t y , m a i n t a i n a b i l i t ya n da d a p t a b i l i t y t h ea p p l i c a t i o no fd e s i g np a t t e me n a b l e st h ed e v e l o p e rt or e u s et h es u c c e s s f u ld e s i g n r e s u l t sc o n v e n i e n t l y t h e r e f o r e ,h o wt os e l e c ta n da p p l yd e s i g np a r e mt od e v e l o po r r e f a c tw e bs y s t e mi sv e r yi m p o r t a n tf o rw e bs y s t e md e v e l o p e r s f i r s t l y , t h et h e s i sa n a l y s e st h ep r e s e n ts i t u a t i o no fw e bs y s t e md e v e l o p m e n ta n d t h er e s e a r c ha n da p p l i c a t i o no fd e s i g np a t t e r n ,s u m m a r i z e st h eb a s i cc o n c e p t sa n d c o r r e l a t i v et e c h n o l o g yo fd e s i g np a t t e ma n da n t i p a t t e m ,a n da n a l y s e st h eg e n e r a l p r i n c i p l e so fo b j e c t o r i e n t e dd e s i g n s e c o n d l y , t h et h e s i sd e s c r i b e ss e v e r a lk i n d so f c o m m o n l y u s e d d e s i g np a t t e r n su s i n gu m l ,a n a l y z e s t h e i ri n t e n t i o n sa n d c h a r a c t e r i s t i c s ,a n di nt h i sf o u n d a t i o n ,p r o p o s e st h es e l e c t i o na n da p p l i c a t i o ns t r a t e g y o f d e s i g np a t t e m 。f i n a l l y , t h et h e s i sp r o p o s e sf i v ek i n d so f a n t i p a t t e m si nw e bs y s t e m d e s i g n i n ga n di m p l e m e n t ,a n dp r o v i d e st h er e f a c t i n gs o l u t i o n su s i n ga p p r o p r i a t ew e b d e v e l o p m e n tf r a m e w o r k sa n dd e s i g np a t t e r n s t h e s ep r i n c i p l e so fo o dd i s c u s s e di nt h et h e s i sa r em o r ei n d e p t ha n du n i v e r s a l d e s i g ng u i d i n gp r i n c i p l e s ;t h e ya r et h ef o u n d a t i o no fd e v e l o p m e n tf r a m e w o r k sa n d d e s i g np a t t e r n s t h ea p p l i c a t i o ns t r a t e g ys u m m a r i z e st h eg e n e r a lr u l e so fd e s i g n i n g a n dr e f a c t i n gs y s t e mu s i n gd e s i g np a t t e r n s t h ea n t i p a t t e r n sp r o p o s e di nt h et h e s i s s u m m a r i z e ss e v e r a lt y p i c a lp r o b l e m sa b o u tt h em u l t il a y e r ss t r u c t u r e ,d a t a b a s e c o n n e c t i o no p t i m i z a t i o n ,u s e ra c c e s sc o n t r o la n da l g o r i t h ma p p l i c a t i o ns t r a t e g yi n w e bs y s t e md e v e l o p m e n t ,t h e i rs o l u t i o n sc a ni m p r o v et h ef l e x i b i l i t y , r e u s a b i l i t ya n d m a i n t a i n a b i l i t yo ft h es y s t e m ,a n dc a nh e l pd e v e l o p e r st od e v e l o pa n dr e f a c tw e b s y s t e m su s i n gd e s i g np a t t e r n s k e yw o r d s :d e s i g np a t t e r n ,a n t i p a t t e m ,o b j e c t o r i e n t e dd e s i g n ,w e bd e v e l o p m e n t f r a m e w o r k ,m v c i i 原创性声明 本人郑重声明:本人所呈交的学位论文,是在导师的指导下独立进行 硬究质毅褥憋成鬃。学位论文中凡弓| 罴艟人已经发表或未发表的成果、 数据、观点等,均已明确注明出处。除文中已经注明引用的内容外,不 包含任僻其德个人或集体己经发表或撰写过的科研成果。对本文豹研究成 果做出蘑要贡献的个人和集体,均己在文中以明确方式标明。 本声明的法律赉任由本人承担。 论文作者签名:缢血缝日期: 关于学位论文使用授权的声明 本人在导师指导下所完成的论文及相关的职务作品,知识产权归属兰 州大学。本人完全了解兰州大学有关保存、使用学位论文的规定,同意学 校保存或向国家有关部门或机构送交论文的纸质版和电子版,允许论文被 查阅和借阅;本人授权兰州大学可以将本学位论文的全部或部分内容编入 有关数据库进行检索,可以采用任何复制手段保存和汇编本学位论文。本 人离校后发表、使用学位论文或与该论文直接相关的学术论文或成果时, 第一署名单位仍然为兰州大学。 保密论文在解密后应遵守此规定。 论文作者签名:! 盘鱼丝导师签名期:丝! i ! :竺 兰州大学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 第一章引言 1 1 w e b 系统开发和应用现状 随着i n t e r n e t 的普及,如何快速开发高质量的w e b 应用系统,以满足社会的 需求,已经成为业界研究的一大热点问题。目前,w e b 系统的开发和应用呈现出 如下特点: ( 】) 基于b s 架构的w e b 应用程序已得到广泛的应用。据国外媒体报道, 互联网调研机构n e t c r a f t 提供的数据显示,截至2 0 0 6 年3 月底,全球网站总数 达到了8 0 6 5 万多。 ( 2 ) 社会对w e b 应用系统的需求还在日益增长。企业、政府、学校等社会 个体为了适应信息化社会发展的需要,纷纷要求开发适合自身业务需要的w e b 应用系统。2 0 0 3 年3 月,n e t c r a f t 提供的全球网站数量是4 0 0 0 万。三年内全球 互联网网站数量翻了一番,仅在2 0 0 6 年2 月底以来的一个月中增加了3 1 0 万。 ( 3 ) w e b 服务器端和客户端开发技术都在不断进步,由静态到动态逐渐发 展和完善起来。w e b 应用的需求也越来越复杂,对系统的稳定性、扩展性和可维 护性要求也越来越高。 ( 4 ) 企业开发平台n e t 和j 2 e e 的出现使开发复杂的w e b 应用成为可能。 j 2 e e 平台是基于j a v a 的解决方案,主要使用j s p 、s e r v l e t 、e j b 等技术。e j b 为 企业级应用中必不可少的数据封装、事务处理、交易控制等功能提供了良好的技 术基础。m i c r o s o f t 的n e t 平台及相关开发环境为w e b 服务端应用提供了一个支 持多种语言的通用的运行平台,并引入a s r n e t 这样一种全新的w e b 开发技术, 可以支持v b n e t 、c # 等编译型语言,支持w e bf o r m 、n e ts e r v e rc o n t r o l 、 a d o n e t 等高级特性【2 9 】。 ( 5 ) w e b 开发框架的应用在很大程度上提高了w e b 应用系统的开发效率和 t 系统质量。目前已有大量基于j a v a 技术的开发框架,如s t r u t s 、t u r b i n e 、 s p r i n g m v c ,w e b w o r k 、t a p e s t r y 、j s f 、e a s y j w e b 、h i b e r n a t e 等。这些开发框 架本身使用了一些优秀的软件设计思想,开发人员在框架提供的平台基础上进行 开发也间接复用了以往成功的设计经验,实现了较为合理的分层设计。 兰、i , i 大学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 虽然w e b 开发技术和开发框架越来越成熟,但目前在已有的w e b 应用程序 和开发新的w e b 系统的过程中,仍然存在一些典型的问题需要解决: ( 1 ) 在现有的w e b 应用系统中,大量的w e b 应用系统存在着可重用程度 低、维护工作繁琐、应变能力薄弱等不足。随着数据量的增大、用户数量的增多 以及新的功能需求出现,每年都有大量的w e b 应用系统因不适合新的需求而需 要修改甚至重新开发。而目前对如何重构w 曲系统的研究较少,重构成本较高。 ( 2 ) 各种开发平台和开发框架有较陡的学习曲线,较难学习和掌握。技术 的集成并不等于技术堆砌,将x m l 语言、m v c 框架等时髦技术拼凑起来未必 能开发出高质量的系统。现有的w e b 开发平台和开发框架本身使用了一些优秀 的设计思想,复用了以往成功的设计经验,但开发者需要先学习框架本身的设计 与配置方法,遵循框架的规定进行开发,导致有比较陡峭的学习曲线。针对具体 的应用,如何选择合适的开发框架,如何最大程度地理解和应用这些框架的优点 以提高软件系统的质量,是设计和编码人员需要解决的重要问题。 ( 3 ) 使用w e b 开发框架的功能并不能有效地复用系统设计的结果,不能从 根本上解决系统开发周期长、费用高以及质量不可靠等问题。 ( 4 ) 在w e b 应用程序开发中,有一些错误的或不合适的解决方案被广泛应 用。目前有大量的关于w e b 应用程序开发的书籍和文献,侧重于具体技术的使 用和开发框架的配置方法,而较少考虑系统性能、可复用性和可维护性,导致开 发的系统中存在大量运行效率低、功能模块难以复用、系统难以扩展等问题。 1 2 设计模式的研究与应用 设计模式是对面向对象设计经验和优秀设计思想的总结,它使系统开发者可 以更加简单方便地复用成功的设计结果,将已证实的技术表述成设计模式也会使 新系统开发者更加容易理解其设计思路。1 9 9 5 年g a n go ff o u rf g o f ) 提出了2 3 种通用的设计模式【l 】,其后设计模式得到了广泛的研究和应用。目前,对设计模 式和与其相关的反模式的研究和应用有以下特点: ( 1 ) 各个设计模式针对的问题不同,解决问题的侧重点也不尽相同,而且 设计模式不是孤立存在的,相互之间存在非常复杂的关系,理解和掌握设计模式 较为困难。 兰州大学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 ( 2 ) 随着技术的不断完善,设计模式的种类日益增多,因此设计和编码人 员如何在实际项目中选择合适的设计模式是一个较为困难的问题。选择正确、恰 当的模式成为人们使用模式的瓶颈,尤其是对于模式不够熟悉的用户。 ( 3 ) 设计模式的实现和具体使用的开发平台和编程语言相关。目前已经有 了很多文献对设计模式在某种开发平台下使用某种编程语言的实现进行研究,如 c # 设计模式、j a v a 设计模式1 6 1 、j a v a 与模式、n e t 设计模式等等,但缺乏 在具体应用领域,如w e b 应用程序开发中的应用研究。 ( 4 ) 与设计模式的研究和应用相比,目前对各个应用领域中反模式的研究 仍然较少。 1 3 本文的研究的主要内容及意义 基于w e b 应用程序开发中存在的问题和设计模式研究和应用的现状,本文 主要做了如下工作: 第一章分析了w e b 应用程序开发和设计模式研究的现状,并介绍了本文研 究的主要内容及意义。 第二章综述了设计模式和反模式的相关概念与技术,分析和探讨了面向对象 设计的基本原则,为提高软件系统的可维护性和可复用性提供了比开发框架、设 计模式更为深层、更具普遍性的设计指导原则,为开发人员理解和掌握开发框架 和开发平台的设计原理提供了理论指导。 第三章使用u m l 描述了几种常用的设计模式,分析了它们的结构、特点及 适用的场景,并在此基础上总结了应用设计模式进行系统设计和重构的一般规 律,提出了选取和应用设计模式的策略。 第四章针对w e b 应用程序开发中的典型问题,总结了一些w e b 应用程序设 计与实现中的反模式,并借鉴一些开源软件中优秀的设计思想和开发方法,使用 设计模式和面向对象设计的基本原理,提出了至少种可能的解决方案,提高了 系统的灵活性、可复用性和可维护性。这些反模式的提出也为开发人员使用设计 模式进行w e b 应用程序重构或开发新系统提供了借鉴方案。 最后,对本文所作的工作做了一个总结,并提出了在此基础上需要继续做的 工作。 兰州大学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 第二章设计模式相关概念与技术 2 1 面向对象设计的基本原则 对软件系统而言,可维护性( m a i n t a i n a b i l i t y ) 和可复用性( r e u s a b i l i t y ) 是 两个重要的设计目标。r o b e r c m a r t i n 指出,导致一个软件设计的可维护性较低, 也就是说会随着性能要求的变化而腐烂的真正原因有四个i ” :过于僵硬 ( r i g i d i t y ) ,过于脆弱( f r a g i l i t y ) ,复用率低( i m m o b i l i t y ) ,黏度过高( v i s c o s i t y ) 。 ( 1 ) 过于僵硬:很难在一个软件系统里加入一个新的性能,哪怕是很小的 都很难。 ( 2 ) 过于脆弱:对一个地方的修改,往往会导致看上去没什么关系的另一 个地方发生故障。 ( 3 ) 复用率低:所谓复用,就是指一个软件的组成部分,可以在同一个项 目的不同地方甚至另一个项目中重复使用。如果程序员在写代码的时候总是发现 现有的代码依赖于一大堆其他的东西,这样的系统将有复用率低的问题。 ( 4 ) 黏度过高:有的时候,一个改动可以以保存原始设计意图和原始设计 框架的方式进行,也可以是以破坏原始意图和框架的方式进行。如果一个系统设 计总是使得第二种方法比第一种方法容易,就叫黏度过高。 与此相反,一个好的设计应该具有可扩展性( e x t e n s i b i l i t y ) 、灵活性 ( f l e x i b i l i t y ) 以及可插入性( p l u g g a b i l i t y ) 【1 3 】。 ( 1 ) 可扩展性:可扩展性是指新的功能很容易加入到系统中去,是过于僵 硬的反面。 ( 2 ) 灵活性:灵活性意味着可以允许代码修改平稳的发生,而不会波及到 很多其他的模块,是过于脆弱的反面。 ( 3 ) 可插入性:可插入性指可以很容易的将一个类抽出去,同时将另一个 有同样接口的类加入进来,是黏度过高的反面。 对于面向对象的软件设计来说,在支持可维护性的同时,提高系统的可复用 性是软件设计中需要考虑的一个重要方面。软件的复用率高可以产生较高的生产 效率,提高软件质量,而且适当的使用复用可阱改善系统的可维护性。 4 兰州大学硕士研究生毕业论文 设计模式在w e b 系统开发中的应用研究 传统的复用有代码的剪贴复用、算法的复用、数据结构的复用等形式。复用 不仅仅是代码的复用,代码复用只是复用的初等形式。在一个面向对象的语言中, 数据的抽象化、继承、封装和多态性等特性使得一个系统可以在更高的层次上提 供复用性。 抽象化和继承关系使得概念和定义可以复用。多态性使得实现和应用可以复 用。抽象化和封装可以保持和促进系统的可维护性,使得复用的焦点不再集中在 函数和算法等具体实现细节上,而是集中在最重要的含有宏观商业逻辑的抽象层 次上。 通过学习和应用设计模式,可以更加深入的理解面向对象的设计理念,帮助 设计人员改善系统设计,提高软件系统的可维护性和可复用性。但设计模式不能 提供具有普遍性的设计指导原则。设计模式的背后有更为深层的、更具有普遍性 的、共同的思想原则,这就是面向对象设计的基本原则。本文总结和分析了以下 几种设计原则:开闭原则,l i s k o v 代换原则,依赖倒转原则,接口隔离原则,组 合聚合复用原则,迪米特法则。 2 1 1开闭原则( o c p ) 任何系统在其生命周期中都会发生变化。开闭原则( t h eo p e n c l o s e p r i n c i p l e ) 就是:一个软件实体应当对扩展开放,对修改关闭【2 】。这里的软件实 体包括类、模块、函数等等。通俗的理解,就是模块设计既要照顾老客户,也能 接纳新客户或老客户新需求。 遵循开闭原则设计的模块具有两个主要的特征: ( 1 ) 对扩展开放:模块的行为是可以扩展的,当应用的需求改变时,我们 可以对模块进行扩展,使其具有满足那些改变的新行为。换句话说,我们可以改 变模块的功能。 ( 2 ) 对修改关闭:对模块行为进行扩展时,不必改动模块的源代码或者二 进制代码。模块的二进制可执行版本,无论是可链接的库、d l l 或者j a v a 的“i a r ” 文件,都无需改动。 这两个特征好像是互相矛盾的。扩展模块的行为的通常方式就是修改该模块 的源代码。不允许修改的模块常常被认为是具有固定的行为。在面向对象的语言 兰州大学硕士研究生毕业论文 设计模式在w e b 系统开发中的应用研究 中,可以使用抽象基类创建出固定却能够描述一组任意个可能行为的抽象体,而 这一组任意个可能的行为则可以表现为可能的派生类。模块可以操作一个抽象 体。由于模块依赖于一个固定的抽象体,所以它对于更改是可以关闭的。同时, 通过这个抽象体派生,也可以扩展此模块的行为。在j a v a 应用程序中,使用接 口比使用抽象类通常具有更好的效果。 在许多方面,开闭原则是面向对象设计的核心所在。遵循这个原则可提高灵 活性、可重用性以及可维护性。但对于应用程序的每个部分都肆意地进行抽象并 不是一个好主意,应该仅仅对程序中呈现出频繁变化的那部分作出抽象。开闭原 则从另外一个角度讲就是对可变性进行封装。一种可变性不应当散落在代码的很 多部分,而应当被封装到一个对象里面。一种可变性也不应当与另一种可变性混 合在一起。拒绝不成熟的抽象和抽象本身一样重要。实现开闭原则的关键是抽象 化,并且从抽象化导出具体化实现。 2 1 2 l i s k o v 代换原则( l s p ) 开闭原则背后的主要机制是抽象( a b s t r a c t i o n ) 和多态( p o l y m o r p h i s m ) ,支 持抽象和多态的关键机制之一是继承。采用l i s k o v 简单替换原则将保证系统使 用了最佳的继承层次,正确使用继承不违反开阔原则。 l i s k o v 代换原则( t h el i s k o vs u b s t i t u t i o np r i n c i p l e ) 的表述是:若对每个类 型t 1 的对象0 1 ,都存在一个类型t 2 的对象0 2 ,使得在所有针对t 1 编写的程 序p 中,用0 2 替换0 1 后,程序p 行为功能不变,则t 2 是t 1 的子类型嘲。 也就是说,子类型( s u b t y p e ) 必须能够替换掉他们的基类型( b a s et y p e ) 。 一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本 不能察觉出基类对象和子类对象的区别。但反过来的代换则不成立,即如果一个 软件实体使用的是一个子类的话,那么它不一定适用于基类,因为子类可能扩展 基类的功能。 一个模型,如果孤立的看,并不具有真正意义上的有效性,模型的有效性只 能通过它的客户程序来表现。在具体的设计中,有一些情况会在一定程度上违反 l s p 的设计原则: ( 1 ) 派生类的退化函数:派生类的某些函数退化而变得没有用处,基类的 兰州大学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 使用者不知道不能调用该已经退化的函数,会导致替换违规。在派生类中存在退 化函数并不总是表示违反了l s p ,但是当存在这种情况时,应该引起注意。 ( 2 ) 从派生类抛出异常:如果在派生类的方法中添加了其基类不会抛出的 异常,而且基类的使用者不期望这些异常,那么把他们添加到派生类的方法中就 可能导致不可替换性。 l i s k o v 代换原则是对开闭原则的补充,是保证开闭原则的重要原则。 2 1 3 依赖倒转原则( d i p ) 传统的过程性系统的设计方法倾向于使高层次的模块依赖于低层次的模块, 即抽象层次依赖于具体层次。这种设计方法侧重于具体层次模块的复用,如算法、 数据结构以及函数库的复用,较高层次的结构依赖于较低层次的机构,这种做法 强调具体层次的可维护性与复用性。 所谓的依赖倒转原则( t h ed e p e n d e n c yi n v e r s i o np r i n c i p l e ) 就是抽象不应该 依赖于细节,而细节应该依赖于抽象1 2 1 。 依赖倒转原则是面向对象设计的主要机制,它的核心思想就是要钊对接口编 程,而不要针对实现编程。依赖倒转本质上倒置的是接口所有权,即低层模块实 现了在高层模块中声明并被高层模块调用的接口。它假设系统的高层商务逻辑模 块是稳定的,而低层与实现有关的算法和逻辑是经常变动的。如果使用j a v a 编 程,应当使用j a v a 接口或抽象类进行变量的类型声明、方法的返回类型声明以 及数据类型的转换等。程序中所有的依赖关系都应该终止于抽象类或接口。如果 完全遵循依赖倒转原则,任何变量都不应该持有一个具体类的指针和引用,任何 类都不应该从具体类派生,任何方法都不应该覆写它的任何基类中已经实现的方 法。 依赖倒转原则强调一个系统内实体之间关系的灵活性。以抽象方式耦合是依 赖倒转原则的关键。 2 1 4 接口隔离原则( i s p ) 接口隔离原则( t h ei n t e r f a c es e g r e g a t i o n i n t e r f a c e ) 就是不应该强迫客户依赖 于它们不使用的方法。使用多个专门的接口比使用单一的总接口要好。从客户类 兰州大学硕士硼究生毕业论文 设计模式在w e b 系统开发中的应用研究 的角度讲,一个类对另外一个类的依赖性应该是建立在最小的接口上【2 1 。 一个对象的客户不是必须通过该对象的接口去访问它,也可以通过委托或者 该对象的基类去访问它。为了更好的使用接1 3 隔离原则,有如下方法: ( 1 ) 对客户进行分组:可以根据客户调用的服务方法来对客户进行分组。 这种分组方法使得可以为每组而不是每个客户创建分离的接口。每一个接1 3 代表 一个角色。 ( 2 ) 改变接口:在维护面向对象的程序时,常常会改变现有的类和组件的 接口。为了减少这些改变的影响,可以通过为现有的对象增加新接口的方法来缓 解,而不是去改变现有的接口。 含有过多方法的过于臃肿的类会导致它们的客户程序之间产生不正常的并 且有害的耦合关系。当一个客户程序要求该类进行一个改动时,会影响到其他所 有的客户程序。因此,客户程序应该依赖于它们实际调用的方法。通过把过于臃 肿的类的接口分解为多个特定客户程序的接口,可以实现这个目标。准确而恰当 地划分角色以及角色所对应的接口,是面向对象设计的一个重要的组成部分,也 是遵循接口隔离原则的关键。 2 1 5 单一职责原则( s r p ) 单一职责原则( t h es i n g l er e s p o n s i b i l i t yp r i n c i p l e ) :就一个类而言,应该仅 有一个引起它变化的原因。也就是一个类的功能要单一,只做与它相关的事情【2 】。 在单一职责原则中,我们把职责定义为“变化的原因”。如果你能够想到多 于一个的动机去改变个类,那么这个类就具有多于一个的原则。 遵守单一职责原则有助于我们分析和编码的思路的清晰,也使编码、测试和 维护变得更加简单。将一个个复杂的问题分隔开来简单化以后,也有利于代码的 重用,有利于系统的扩展。 2 1 6 合成倮合复用原则( c a r p ) 合成( c o m p o s i t i o n ) 和聚合( a g g r e g a t i o n ) 都是关联( a s s o c i a t i o n ) 的特殊 种类。聚合用来表示拥有关系或者整体与部分的关系,而合成是一种更强的拥有 关系。用c + + 的概念来讲,聚合是一种引用的关联,合成则是值的关联,合成的 兰州大学硕士研究生毕业论文设计模式在w e b 系统9 t :发中的应用研究 新的对象对其成员对象拥有支配权,包括对象的创建与删除、内存的分配与内存 的释放等。合成的多重性不能超过1 ,也就是一个合成关系中的成员对象不能够 与另一个合成关系共享,该成员对象在同一个时间里只能属于这一个合成关系。 使用合成或聚合,可以使用已有的对象组成新的对象,新对象可以调用已有 对象的功能。在设计的时候,每一个新的类可以功能比较单一,而通过合成和聚 合,我们可以复用已有的简单类的功能,组合出功能更复杂的类。而且这种对已 有类的复用可以在运行时动态进行,新对象可以动态引用与成员对象类型相同的 对象。 继承是通过扩展一个已有对象的实现来得到新的功能。基类实现共同的属性 和方法,而子类通过增加新的属性和方法扩展基类的实现。实现继承比较容易, 它是面向对象语言本身具有的复用工具,基类的大部分功能通过继承关系直接自 动进入子类,修改和扩展继承后的实现也比较容易。但是继承将基类的实现细节 暴露给了子类,破坏了封装,而且基类的实现发生改变,子类的实现也必须改变。 继承实现的复用是静态的复用,不能在运行时改变,不够灵活。 合成聚合复用原则( c o m p o s i t e a g g r e g a t er e u s ep r i n c i p l e ) 就是要尽量使用 合成聚合,尽量不要使用继承。也就是要在一个新的对象里面使用一些已有的 对象,使之成为新对象的部分;新的对象通过向这些对象的委派达到复用这些 对象的目的【2 j 。 2 1 7 迪米特法则( l o d ) 迪米特法则( l o wo f d e m e t e r ) 也称之为最少知识原则,即一个对象应当对 其他对象有尽可能少的了解【2 j 。 系统中的类,尽量不要与过多的类互相作用,以减少类之间的耦合度。因为 在系统中进行扩展的时候,可能需要修改这些类,而类与类之间的关系决定了修 改的复杂度。例如a 类依赖b 类,而b 类依赖c 类,当在修改c 类的时候,就 要考虑b 类是否会受到影响,而b 类的影响是否又会影响到a 类。相互作用越 多,则修改难度就越大;反之,如果相互作用的越少,则修改起来的难度就越小。 为了遵循迪米特法则,一个类要尽量将自己的交互范围限制在较少的几个关 系密切的类之中,如果需要访问一些关系不太密切的类,可以通过周围相关的类 9 兰州火学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 进行转发。遵循迪米特法则设计的系统会有大量的小方法,而这些方法仅仅负责 传递间接的调用,和系统本身的商务逻辑无关。这样的系统局部的设计简化,但 不同模块的通信效率却比较低。迪米特法则可以和依赖倒转原则互补使用。 2 2 设计模式 2 2 1 什么是设计模式 模式的概念最早起源于建筑设计大师c h r i s t o p h e ra l e x a n d e r 关于城市规划和 建筑设计的著作建筑的永恒方法,尽管a l e x a n d e r 的著作是针对建筑领域的, 但他的观点实际上适用于所有的工程设计领域,其中就包括软件设计领域。在建 筑的永恒方法书中,a l e x a n d e r 是这样描述模式的1 2 j : 模式是一条由三部分组盛的规弛。它表示了一个特定环境、一个镝题和一个 解决隽案之阚的关系,每一个模式捂述7 一个在我们禹函不龋重复发生的目邈 以及该阃题的解决方案的核心,这样你就能一次又一次她使甬该力案而不必做 重复劳动, 在软件设计领域中,每一个设计模式都系统地命名、解释和评价了面向对象 系统中的一个重要的和可复用的设计。我们只要理解和掌握了这些设计模式,就 可以完全或者说很大程度上吸收了那些蕴含在模式中的宝贵经验,从而对软件体 系结构有了比较全面的了解。更加重要的是,这些模式都可以用来指导面向对象 系统设计中至关重要的对象建模问题,实际工作中一旦遇到具有相同背景的场 合,根据面向对象设计的原则和系统的实际情况,选取合适的模式应用到设计中, 可以省去了很多摸索工作。 将设计模式引入软件设计和开发过程的目的在于充分利用已有的软件开发 经验,这是因为设计模式通常是对于某类软件设计问题的可重用的解决方案。 对于优秀的软件设计师而言,不是所有的问题都需要从头开始解决,他们更愿意 复用以前曾经使用过的解决方案,每当他们找到一个好的解决方案,他们会一遍 又一遍地使用,这些经验是他们成为专家的部分原因。设计模式的最终目标就是 帮助人们利用熟练的软件设计师的集体经验,来设计出更加优秀的软件。 设计模式( d e s i g n p a t t e r n ) 的提出,是面向对象程序设计演化过程中的一个 1 0 兰州大学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 重要里程碑。设计模式使得人们可以更加简单和方便地去复用成功的软件设计和 体系结构,从而能够帮助设计者更快更好地完成系统设计。 2 2 2 架构与模式 架构( a r c h i t e c t u r e ) 和模式( p a t t e r n ) 是在当前的软件开发中经常被提及的 概念,但是这两个术语比较容易混淆,而对此,学术界也没有一个非常统一的定 义。 软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构 尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视 点也会造成软件体系结构的不同理解。 a n s i i e e e6 1 0 1 2 1 9 9 0 软件工程标准词汇对于体系结构定义是2 3 】:“体系架 构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本 组织结构以及指导上述内容设计与演化的原理”。 m a r ys h a w 和d a v i dg a r l a n 认为软件体系结构是软件设计过程中,超越计算 中的算法设计和数据结构设计的一个层次。体系结构问题包括各个方面的组织和 全局控制结构,通信协议,同步,数据存储,给设计元素分配特定功能,设计元 素的组织,规模和性能,在各设计方案之间进行选择。 g a r l a n & s h a w 模型的基本思想是:软件体系结构= 构件( c o m p o n e n t ) ,连接 件( c o n n e c t o r ) ,约束( c o n s t r a i n ) 。其中构件可以是一组代码,如程序的模块;也 可以是一个独立的程序,如数据库服务器。连接件可以是过程调用、管道、远程 过程调用( a p c ) 等,用于表示构件之间的相互作用。约束一般为对象连接时的规 则,或指明构件连接的形式和条件,例如,上层构件可要求下层构件的服务,反 之不行;两个对象不允许递规地发送消息;代码复制迁移的一致性约束;在什么 条件下此种连接无效等。 软件模式是人们在长期的设计软件、管理组织软件开发等实践中大量经验的 提炼和抽象,是复用软件设计方法、过程管理经验的有力工具。模式提供了系 列软件开发中的思维套路,通过模式的使用,有利于在复杂的系统中产生简洁、 精巧的设计。 软件模式为我们提供了套简洁通用的设计、管理、组织方面的词汇,同时 兰州大学硕二l 研究生毕业论文 设计模式在w e b 系统开发中的应用研究 模式也为我们提供了个描述抽象事物的规范标准,可大大促进软件开发过程中 人与人之间的交流,而软件开发中的交流是至关重要的。软件项目,尤其是较大 规目的软件项目之所以失败,有很多是因为不同团队之问或者是同一个团队内的 开发者之间,交流不够充分导致的。 架构和模式是一个属于相互涵盖的过程,但是总体来说架构更加关注的是更 高层次的设计,而模式关注的重点在于通过经验提取的准则或指导方案在设计中 的应用,因此在不同层面考虑问题的时候就形成了不同问题域上的模式。模式的 目标是把类似问题中的不变部分和变化部分分离出来。不变的部分就构成了模 式,因此模式是一个经验提取的准则,并且在一次一次的实践中得到验证,在不 同的层次有不同的模式,d , n 语言实现大到架构。在不同的层面上,模式提供不 同层面的指导。根据处理问题的粒度不同,从高到低,模式分为3 个层次:架构 模式( a r c h i t e c t u r a l p a t t e r n ) 、设计模式( d e s i g n p a t t e r n ) 、实现模式( i m p l e m e n t a t i o n p a t t e r n ) 。 ( 1 ) 架构模式( a r c h i t e c t u r a lp a t t e r n ) :是模式中的最高层次,描述软件系 统里的基本的结构组织或纲要,通常提供一组事先定义好的子系统,指定它们的 责任,并给出把它们组织在一起的法则和指南。比如,用户和文件系统安全策略 模型,n 层结构,组件对象服务,名字服务等。一个架构模式常常可以分解成很 多个设计模式的联合使用。m v c 模式是应用较为广泛的一种架构模式,它与 w e b 应用程序开发关系密切。 ( 2 ) 设计模式( d e s i g n p a t t e r n ) :是模式中的第二层次,用来处理程序设计 中反复出现的问题。例如,g o f 总结的2 3 个基本设计蘑式,包括工厂模式 ( f a c t o r yp a t t e r n ) ,观察者模式( o b s e r v e rp a t t e r n ) ,单例模式( s i n g l e t o ap a t t e r n ) 、 代理模式( p r o x yp a t c e m ) 等。 ( 3 ) 实现模式( i m p l e m e n t a t i o np a t t e r n ) :是最低也是最具体的层次,处理 具体到编程语言的问题。比如,类名、变量名、函数名的命名规则,异常处理的 规则等。 相对于系统分析或者设计模式来说,架构从更高的层面去考虑问题,所以关 注的问题就体现在不变因素上,比如系统部署中,更加关心应用程序的分层分级 设计,而在这个基础之上提出的部署方案,才是架构考虑的重点。架构关心应用 兰州大学碗士研究生毕业论文 设计模式在w e b 系统开发中的应用研究 程序模式,更加体现在通过技术去解决这些业务差异带来的影响,关心是否是分 布式应用程序,关心系统分层是如何设计,以及系统的性能和安全,因此在这样 的情况之下,会考虑集群,负载平衡,故障迁移等等一系列技术。 架构是系统较高层次的设计,着眼于不同业务中共性的解决方案,而模式是 更为通用的设计原理。在构建企业级应用系统的时候,需要以架构为基础,用模 式做设计中的指导。企业级业务解决方案通常比较复杂,而且对性能的要求较高。 企业级的应用不仅必须具有高可用性和伸缩性以应对不可预知的使用,而且还必 须具有适应性和预见性以适应快速变化的业务要求。最佳解决方案是那些由一组 更小的、简单的、能够可靠且有效地解决简单问题的机制组成的解决方案。在构 建更大、更复杂的系统过程中,将这些简单的机制组合在一起,从而形成更大的 系统。这些简单机制的认识和积累来自于设计人员和开发人员丰富的经验。 模式对于开发人员和体系结构设计者非常有用,因为它们记录能够正常工作 的简单机制,为开发人员和体系结构设计者提供通用的词汇和分类法,而且允许 以模式组合的方式简明扼要地描述方案。模式中允许重复使用体系结构、设计和 实现决策。 2 2 3 设计模式的分类 设计模式在抽象的粒度和抽象层次上各不相同,对设计模式进行分类可以帮 助我们找出相关的模式,也有利于我们发现新的模式。我们可以根据两条准则对 设计模式进行分类f ”。 第一是目的准则,即模式是用来完成什么工作的。根据目的准则我们可以将 模式分为创建型、结构型和行为型三种。创建型模式与对象的创建有关;结构型 模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行 描述。 第二是范围准则,指定模式主要用于类还是对象。类模式处理类和子类之间 的关系,这些关系通过继承建立,是一种静态的关系,在编译时刻就确定下来了, 不能在运行时动态改变。对象模式处理对象间的关系,这些关系是动态的,在运 行时刻可以改变。 g o f 中提到的2 3 种设计模式的分类如下所示1 】: 兰州大学硕士研究生毕业论文设计模式在w e b 系统开发中的应用研究 目的 创建型结构型行为型 范围类f a c t o r gm e t h o d a d a p t e r ( 类)i n t e r p r e t e r t e m p l a t em e t h o d 对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国铝合金船舶市场前景预判与未来投资效益可行性研究报告
- 2025-2030中国钻井船行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国金属包装材料行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025-2030中国重量填料行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国醋酸饮料行业发展趋势与投资战略研究报告
- 2025-2030中国酚醛板行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国邻甲酚市场运行态势与发展趋势预测分析研究报告
- 2025-2030中国造纸、印刷和出版领域的机器人技术行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国轿车和掀背车ACC数字信号处理器行业市场发展趋势与前景展望战略研究报告
- 2025年超硬复合材料项目合作计划书
- 2023年中国工商银行天津分行校园招聘考试录用公告
- 送达地址确认书(诉讼类范本)
- 班组工程量结算书
- 生产件批准申请书
- 环境监测考试知识点总结
- 爵士音乐 完整版课件
- 嘉兴华雯化工 - 201604
- 冀教版七年级下册数学课件 第8章 8.2.1 幂的乘方
- XX公司“十四五”战略发展规划及年度评价报告(模板)
- 计算机辅助设计(Protel平台)绘图员级试卷1
- 除法口诀表(完整高清打印版)
评论
0/150
提交评论