封装的变化之不断变化的需求

简介:
 软件设计最大的敌人,就是应付需求不断的变化。变化有时候是无穷尽的,于是项目开发就在反复的修改和更新中无限期地延迟交付的日期。变化如悬在头顶的达摩克斯之剑,令许多软件工程专家一筹莫展。正如无法找到解决软件开发的“银弹”,要彻底将变化扼杀在摇篮之中,看来也是不可能完成的任务。那么,积极地面对“变化”,方才是可取的态度。于是,极限编程(XP)的倡导者与布道者Kent Beck提出要“拥抱变化”,从软件工程方法的角度,提出了应对“变化”的解决方案。而本文则试图从软件设计方法的角度,来探讨如何在软件设计过程中,解决未来可能的变化,其方法就是——封装变化。
 
        设计模式是“封装变化”方法的最佳阐释。无论是创建型模式、结构型模式还是行为型模式,归根结底都是寻找软件中可能存在的“变化”,然后利用抽象的方式对这些变化进行封装。由于抽象没有具体的实现,就代表了一种无限的可能性,使得其扩展成为了可能。所以,我们在设计之初,除了要实现需求所设定的用例之外,还需要标定可能或已经存在的“变化”之处。封装变化,最重要的一点就是发现变化,或者说是寻找变化。
 
        GOF对设计模式的分类,已经彰显了“封装变化”的内涵与精髓。创建型模式的目的就是封装对象创建的变化。例如Factory Method模式和Abstract Factory模式,建立了专门的抽象的工厂类,以此来封装未来对象的创建所引起的可能变化。而Builder模式则是对对象内部的创建进行封装,由于细节对抽象的可替换性,使得将来面对对象内部创建方式的变化,可以灵活的进行扩展或替换。
 
        至于结构型模式,它关注的是对象之间组合的方式。本质上说,如果对象结构可能存在变化,主要在于其依赖关系的改变。当然对于结构型模式来说,处理变化的方式不仅仅是封装与抽象那么简单,还要合理地利用继承与聚合的方法,灵活地表达对象之间的依赖关系。例如Decorator模式,描述的就是对象间可能存在的多种组合方式,这种组合方式是一种装饰者与被装饰者之间的关系,因此封装这种组合方式,抽象出专门的装饰对象显然正是“封装变化”的体现。同样地,Bridge模式封装的则是对象实现的依赖关系,而Composite模式所要解决的则是对象间存在的递归关系。
 
        行为型模式关注的是对象的行为。行为型模式需要做的是对变化的行为进行抽象,通过封装以达到整个架构的可扩展性。例如策略模式,就是将可能存在变化的策略或算法抽象为一个独立的接口或抽象类,以实现策略扩展的目的。Command模式、State模式、Vistor模式、Iterator模式概莫如是。或者封装一个请求(Command模式),或者封装一种状态(State模式),或者封装“访问”的方式(Visitor模式),或者封装“遍历”算法(Iterator模式)。而这些所要封装的行为,恰恰是软件架构中最不稳定的部分,其扩展的可能性也最大。将这些行为封装起来,利用抽象的特性,就提供了扩展的可能。
 
       利用设计模式,通过封装变化的方法,可以最大限度的保证软件的可扩展性。面对纷繁复杂的需求变化,虽然不可能完全解决因为变化带来的可怕梦魇,然而,如能在设计之初预见某些变化,仍有可能在一定程度上避免未来存在的变化为软件架构带来的灾难性伤害。从此点看,虽然没有“银弹”,但从软件设计方法的角度来看,设计模式也是一枚不错的“铜弹”了。 
















本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/167073  ,如需转载请自行联系原作者

相关文章
|
2天前
|
弹性计算 Serverless
函数计算的功能变化
函数计算的功能变化
14 2
|
10月前
|
设计模式 算法
代码小变化带来的大不同
代码小变化带来的大不同
43 0
|
前端开发 JavaScript Java
总结自己使用技术的变化
根据自己的经验,总结自己使用技术的变化
119 0
|
设计模式 前端开发 Java
职责驱动设计以及状态模式的变化
职责驱动设计以及状态模式的变化
职责驱动设计以及状态模式的变化
|
JavaScript
怎么实现监测数组的变化
怎么实现监测数组的变化
94 0
echarts 多次通过setOption改变图形数据时 数据有时不进行变化
echarts 多次通过setOption改变图形数据时 数据有时不进行变化
echarts 多次通过setOption改变图形数据时 数据有时不进行变化
|
存储 资源调度 容灾
云端2021观察:“变化”
2021年是新世纪来,可能变化最剧烈的一年吧,我自己的体感是这样的。 作为一名在基础设施一线研发多年的码农,不自觉地问自己:这一年都发生了什么,自己做了什么,未来能做些什么?特别是未来的‘趋势’、未来的‘风口’。下面就是自己的一些‘务虚’思考。
137 0
云端2021观察:“变化”
永恒不变的,是变化
永恒不变的,是变化 ​ 前几日在博客园随便逛逛,读到了 纯洁的微笑 的一篇文章 你看那个人,他好像一条狗,文中以他三十之年的迷茫,谈到了他人生中所面临过的几个迷茫点,这激起了我的思考。 ​ 第一次自己做决定,是在高中,高二文理分班,决定自己学文,还是学理。
1233 0
生活里的细微变化
生活里的变化蛮多,真是点点滴滴里的体现细节,由此自己也有了一些想法,拿出来和大家聊一聊。 就拿我今天在思考的超市购物来说吧。我们楼下有个物美超市,平日里人也不少,今天去超市,发现人比平常多了很多,原来是因为双十一在搞活动。
1491 0