本文轉載自http://wasiker.javaeye.com/blog/232174
軟件的可維護性和可複用性
關鍵字: 設計模式 可維護性 可擴展性
一般來說,一個易於維護的系統,就是複用率較高的系統;一個複用率較好的的系統,就是一個易於維護的系統。但是,實際上,可維護性和可複用性是兩個獨立的目標。
軟件系統的可維護性:
軟件維護就是軟件的再生。一個好的軟件設計,必須能夠允許新的設計要求以比較容易和平穩的方式加入到已有的系統中去,從而使這個系統能夠不斷的的煥發出活力。
一個可維護性較好的系統,應當允許維護工作能夠以容易、準確、安全和經濟的形式進行。
導致可維護性較低的原因:
1.過於僵硬:在系統中加入一個新的功能,不管大小都很難,不僅意味着建造一個獨立的新的模塊,而且因爲這個新功能會波及很多其他模塊,最後成跨越幾個模塊的改動。
2.過於脆弱:與軟件的過於僵硬同時存在,是軟件系統在修改已有代碼時過於脆弱。對一個地方的修改,往往會導致看上去沒有什麼關係的另外一個地方發生故障。
3.複用率低:所謂複用,就是指一個軟件的組成部分,可以在同一個項目的不同地方甚至另一個項目中重複使用。複用率低,指當一段代碼,函數,模塊的功能可以在新的模塊或新的系統使用,但是已有代碼依賴於其他很多東西,很難分開。
4.黏度過高:一個改動可以保存原始設計意圖和原始設計框架的方式進行,也可以以破壞原始意圖和框架進行。第一種方法對系統的未來有利,第二種辦法是權宜之計,可以解決短期的問題,但是會犧牲中長期的利益。如果一個系統中使用第二種方法比使用第一種方法容易,那麼就是黏度過高。
設計的目標:
1. 可擴張性
2. 靈活性
3. 可插入性
系統的可複用性:
複用性的重要性:
1. 較高的生產效率
2. 較高的軟件質量
3. 恰當使用複用可以改善系統的可維護性
傳統的複用和麪向對象的系統設計中複用的區別
1.傳統的複用:代碼的剪貼複用;算法的複用;數據結構的複用。
2.面向對象的設計的複用:在OO中數據的抽象化、繼承、封裝和多態是幾個重要的語言特性,這些特性使得一個系統可以在更高的層次上提供可複用性。
數據的抽象化和繼承關係使得概念和定義可以複用;
多態性使得實現和應用可以複用;
抽象化和封裝可以保持和促進系統的可維護性。
可複用和可維護性的關係
1. 適當的使用複用,可以提高可維護性,即支持可維護性的複用,就是在保持甚至提高系統的可維護性的同時,實現系統的複用。
2. 適當提高系統的可複用性可以提高系統的可擴展性:系統的可擴展性由“開-閉”原則、里氏代換原則、依賴倒轉原則和組合/聚合複用原則所保證。
3. 適當提高系統的可複用性,可以提高系統的靈活性。系統的靈活性由“開-閉”原則、迪米特法則、接口隔離原則所保證的。
4. 適當提高系統的可複用性,可以提高系統的可插入性。系統的可插入性由“開-閉”原則、里氏代換原則、組合/聚合複用原則和依賴倒轉原則所保證。
複用原則:
1. “開-閉”原則:OCP
2. 里氏代換原則:LSP
3. 依賴倒轉原則:DIP
4. 接口隔離原則:ISP
5. 組合/聚合複用原則:CARP
6. 迪米特法則:LoD