ξ 3.1 軟件系統的可維護性
☆ 導致一個軟件設計的可維護性較低,也就是說會隨着性能要求的變化二“腐爛”的真正原因有四個:
① 過於僵硬
加入一個新性能,不僅僅意味着建造一個獨立的模塊,而且因爲這個新性能會波及很多其他的模塊,最好變成跨越幾個模塊的改動。
② 過於脆弱
對一個地方的修改,往往會導致看上去沒什麼關係的另外一個地方發生故障。儘管在修改之前,設計師會盡力預測可能的故障點,當是修改完成之前,系統的原始設計師們甚至都無法預測到可能會波及的地方。
③ 複用率低
每當程序員發現一段代碼、函數、模塊所做的事情是可以在新的模塊、或者新系統中使用的是,他們總是發現,這些已有的代碼依賴於一堆其他的東西,以至於很難將它們分開。最好他們發現最好的辦法就是不去“碰”這些已有的東西,而是重新寫自己的代碼。他們可能會使用源代碼拷貝的辦法,以最原始的複用方式,節省一些時間。
④ 黏度過高
有的時候,一個改動可以以保存原始設計意圖和原始設計框架的方式進行,也可以以破壞原始意圖和框架的方式進行。一個系統設計,如果總是使得第二種辦法比第一種辦法容易,就叫黏度過高。一個黏度過高的系統會誘使維護它的程序員採取錯誤的維護方案,並懲罰採取正確維護方案的程序員。
☆ 一個好的系統俄軍應該有如下的性質:
① 可擴展性
新的性能可以很容易地加入到系統中去,就是可擴展性。這就是系統“過於僵硬”的屬性的方面。
② 靈活性
可以允許代碼修改平穩地發生,而不會波及到很多其他的模塊,這就是靈活性。靈活性其實就是“過於脆弱”的屬性的方面。
③ 可插入性
可以很容易地將一個類抽出去,同時將另外一個有同樣接口的類加入進來,這就是可插入性。其實,這就是“黏度過高”的方面。
ξ 3.2 系統的可複用性
☆ 軟件複用的好處
第一,較高的生產效率;
第二,較高的軟件質量;
第三,恰當使用複用可以改善系統的可維護性。
☆ 傳統的複用形式
① 代碼的剪貼複用;
② 算法的複用;
③ 數據結構的複用。
☆ 提高系統可維護性和可複用性的設計原則
① “開-閉”原則(Open-Closed Principle,或者OCP);
② 里氏替代原則(Liskov Substitution Principle,或者LSP);
③ 依賴倒轉原則(Dependency Inversion Principle,或者DIP);
④ 接口隔離原則(Interface Segregation Principle,或者ISP);
⑤ 組合/聚合複用原則(Composition/Aggregation Principle,或者CARP);
⑥ 迪米特法則(Law of Demeter,或者LoD);