软件的可维护性与可复用性
一个软件随着需求的变化最终“腐烂”的真正原因:
主要有四个:
1. 过于僵硬(Rigidity)
2. 过于脆弱 (Fragility)
3. 复用率低(Immobility)
4. 黏度过高(Viscosity)
分别解释一下这四个原因的具体表现
过于僵硬
很难网一个软件系统中加入新的特性,哪怕是很小特性都很困难。这是因为加入一个新的特性不仅仅意味着要增加一个独立的模块,而且还会涉及到别的许多模块的修改,修改工作量巨大,模块的跨度巨大,导致前一发动全身。
由于这软件设计的缺陷,使得项目经理不敢轻易的向系统中增加新的功能。造成,软件系统一旦做好,就不能再网系统中添加新的功能。即便添加了,也会随着新特性的加入,导致软件后期维护工作量巨大,导致人员疲惫不堪,资金消耗巨大,等等
过于脆弱
与软件过于僵硬同事存在的,是软件系统在修改已有代码时过于脆弱。对一个地方的修改,往往会导致看上去没有什么关系的另一个地方莫名的发生故障。尽管在修改之前,设计师们会竭尽全力预测可能出现的故障点,但是这些故障点往往是很难预测到得甚至是无法预测到得。就好比你家窗户坏了,你修了修,好了。下雨了,原本好好的屋顶开始漏雨了,弄的你不知所措。
复用率低
所谓复用,就是指一个软件的组成部分,可以在同一个项目的不同地方甚至是另一个项目中重复使用。
每当程序员发现一段代码,函数,模块所作的事情是可以在新的模块 或是系统中使用的时候,他们总是发现,这些已有的代码依赖于其他一大堆东西,以至于很难将他们分开。最后导致,重新编写代码。可能的话,会使用vc大法,但是这是最原始的复用方式,效果也不是最好的。
这样的系统就有复用率低的问题。
黏度过高
有的时候,一个改动可以保存原始设计意图和原始设计框架的方式进行,也可以破坏原有意图和框架的方式进行。第一种方法无疑是对系统以后维护有利的,第二种方法是权宜之计,只能解决燃眉之急,并不能根治。
如果第二种方法比第一种方法来的更容易的话,就叫做粘度过高。
这样的设计导致无疑会对后期的维护造成不可估量的困难。
设计的目标
根据Peter Coad大师的一文,一个号的系统设计应该有如下的性质:可扩展性(Extensibility),灵活性(Flexibility)
可插入性(Pluggability)。这三条性质就是一个系统设计应达到的目标,下面分别说下这个三个目标。
可扩展性
新的性能可以很容易地加入到系统中去,就是扩展性。这就是所说的系统“过于僵硬”的属性的对立面。
比如说,给房子里添加一个制热或者制冷系统,房子不会出现别的问题。如果出现什么其他的问题,则
就是说这个系统的可扩展性不是很好。
灵活性
可以允许代码修改平稳地发生,而不会涉及到很多其他的模块,这就是灵活性。灵活性,其实就是
过于脆弱的对立面。
可插入性
可以很容易地将一个类抽出去,同事将另一个有同样接口的类加入进来,这就是可插入性。其实,这就是
“粘度过高”的对立面。
系统的可复用性
复用(Reuse),是重复使用的意思。
复用的重要性
好处:第一,较高的生产效率,减少资金投入。
第二,较高的软件质量
第三,恰当的使用复用可以改善系统的可维护性。
综上所述,怎么样实现以个这样的良好的系统呢?
根据专家们的经验,总结出来了一些常用的设计模式,灵活的使用
它们可以让你的系统尽可能的优秀。但是,这些设计模式又是根据一些基本
原则创立出来的,这些模式是这些原则的体现。
以下是设计原则:
“开-闭“原则 (Open-Closed Principle, short for OCP)
里氏代换原则 (Liskov Substitution Principle, short for LSP)
依赖倒转原则(Dependency Inversion Principle, short for DDP)
接口隔离原则(Interface Segregation Principle, short forISP)
组合/聚合复用原则(Composition/Aggregation Principle,short for CARP)
迪米特法则(Law of Demeter, short for LoD)
分享到:
相关推荐
学习-学习平台-学习平台源码-学习平台java代码-学习平台设计与实现-基于springboot的学习平台-基于Web的学习平台设计与实现-学习网站-学习网站源码-学习网站java代码-学习项目-学习项目代码-学习系统-学习系统源码-...
学习-学习平台-学习平台源码-学习平台java代码-学习平台设计与实现-基于springboot的学习平台-基于Web的学习平台设计与实现-学习网站-学习网站源码-学习网站java代码-学习项目-学习项目代码-学习系统-学习系统源码-...
【JAVA2学习资料--第二部分ppt教程】 Java作为全球最流行的编程语言之一,因其跨平台、面向对象的特点,被广泛应用于各种领域,如企业级应用开发、移动应用(Android)、大数据处理等。本教程主要针对Java2阶段的...
学习辅助-学习辅助系统-学习辅助系统源码-学习辅助管理系统-学习辅助管理系统java代码-学习辅助系统设计与实现-基于ssm的学习辅助系统-基于Web的学习辅助系统设计与实现-学习辅助网站-学习辅助网站代码-学习辅助平台...
书籍学习-书籍学习平台-书籍学习平台源码-书籍学习平台java代码-书籍学习平台设计与实现-基于springboot的书籍学习平台-基于Web的书籍学习平台设计与实现-书籍学习网站-书籍学习网站源码-书籍学习网站java代码-书籍...
书籍学习-书籍学习平台-书籍学习平台源码-书籍学习平台java代码-书籍学习平台设计与实现-基于springboot的书籍学习平台-基于Web的书籍学习平台设计与实现-书籍学习网站-书籍学习网站源码-书籍学习网站java代码-书籍...
学习辅助-学习辅助系统-学习辅助系统源码-学习辅助管理系统-学习辅助管理系统java代码-学习辅助系统设计与实现-基于ssm的学习辅助系统-基于Web的学习辅助系统设计与实现-学习辅助网站-学习辅助网站代码-学习辅助平台...