`

java与模式学习第二部分---第三章

阅读更多

  软件的可维护性与可复用性

  一个软件随着需求的变化最终“腐烂”的真正原因:

   主要有四个:

   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)



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics