怎么提高程序的可修改性


程序可修改性非常重要,畢竟世界總是動態變化的,以前寫的程序在新條件下可能不滿足需求,也有可能程序需求在初始階段並沒有搞明白,后來就越來越清楚了。總之,程序需要被修改或者直接重寫。如果總是重寫,從零開始,成本是很大的。如果有之前的積累,至少和別人相比,起點也會高些。但是,如果程序可修改性太差,也有可能會讓我們陷入泥潭,還真不如輕裝上陣來的自在!

首先,怎么才算可修改性高呢?我覺得有兩個指標:

一、修改本身實現起來容易

二、修改不影響程序其他部分

下面,我們看看為了實現這些目標,都有什么策略。修改本身容易,我覺得分為兩種情況:

(1)      任務量減少了

(2)      任務量不變,但效率提高了

減少任務量

怎么讓一個修改的任務量減少呢?可能是一個好的主意讓任務量減少,比如說《五軍之戰》,目標是矮人要擊敗半獸人,怎么辦,可以硬抗,但是任務量大,還不一定抗得住;電影里面,是擒賊先擒王,任務量不知道少了多少個等級,結果還勝了。還有一個辦法就是復用,利用以前的工作,使得本次任務量降低。總結起來就是:

a)        一個好主意,使得任務量變低

b)        復用,總任務量不變,但本次任務量降低了

一個好主意,可遇而不可求,我們也不做苛求,所以減少任務量的主要辦法就是復用。復用說起來容易,實現起來實際上很難的,並且要克服自己的直覺習慣,每次實現的時候,要想想哪些可以復用。可以參考設計模式來獲得更多復用的靈感。

提高效率

任務量不變情況下,提高效率,我覺得有兩種辦法:

a)        自動化

b)        並發

自動化,是利用工具或者腳本來代替我們工作,從而提高效率。甚至有一些更高級的,比如說一些uml工具可以自動生成代碼等等。要支持並發,其實也離不開自動化工具,多個自動化工具同時進行,效率會大幅提升。只不過需要任務的基礎架構支持並發。

依賴穩定

第二個指標是修改不影響程序其他部分,可以把它分為三種情況:

(1)      修改和其他部分獨立

(2)      就是不獨立,想連部分保持不變

(3)      實在要變,把影響降到最小

我們先來說第一個,修改和其他部分獨立,換種說法就是其他部分不依賴修改部分。這里有一些基本原則,可以遵守:高層模塊不應該依賴底層模塊,抽象不應該依賴細節,細節應該依賴抽象。簡單來說就是容易變的應該依賴不怎么變的。比如說有兩個不同對象a,b。它們如果要互相通訊,有三種辦法:

a)        a 調用b,b調用a

b)        a 調用b,a 監聽b事件,收到b的信息

c)        b 調用a,  b監聽a事件,收到a的信息

如果圖簡單方便的話,a)是首選,也是直覺上的自然選擇。如果稍加考慮,看看依賴關系,比如說b是容易變的,此時不應該讓a依賴b發生,所以最后就應該選c)。

接口編程

如果實在要依賴,那么就要依賴接口,並且保持修改的時候,接口保持不變。在設計模式中,實現了變化,但是接口卻保持不變的有幾個相關模式,比如:適配器、裝飾器、代理等等。

影響最小化

最后,實在沒辦法,接口也要變。一種辦法是把變化封裝到一個模塊內,這就涉及到基本功,類設計的時候,按照職責分配,提高內聚性,並把模塊粒度控制在一個合理的大小范圍內。第二個辦法是基於外部的,利用中介把外部幾個都依賴修改的轉換成都依賴中介,然后讓中介一個依賴修改。不過,這個設計需要前期判斷,覺得哪個地方出現變化的概率大,不然會出現很多無用功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM