一段代碼能正常Run,沒有BUG,這就代表這段代碼沒有問題,是一段良好的代碼了嗎?沒有BUG,能運行,這不代表這段代碼是一個好代碼.
或者說評價一個代碼的好壞,其指標(biāo)或者說原則應(yīng)該是多元的,不僅僅是能Run,并且沒有BUG.而評價一個代碼最重要的是,代碼能否適應(yīng)將來的需要,即對代碼的維護.
代碼能Run,不是說Run一次兩次能用就好了,你要考慮的是它一年以后,兩年以后,五年以后.甚至十年二十年以后,
這個代碼還可能有其他人或者你自己要繼續(xù)做下去.需求如果有了變更,要進一步發(fā)展下去,這個時候你拿之前寫的代碼怎么辦.
你的代碼還能不能在今后起作用;
讓今后做維護的,無論是其他人還是你自己,能夠比較容易的在這個代碼的基礎(chǔ)上做事情.這才是我們考察代碼良好的一個重要原則。
就是說這個代碼適不適合擴展,也就是常說的可擴展性.在程序中存在相似甚至相同的代碼塊,這是非常低級的代碼質(zhì)量問題。
代碼復(fù)制所帶來的問題就是:如果需要去修改一個副本,那么就必須得同時修改所有其他的副本.否則就存在不一致的問題.這大大增加了維護程序的工作量,而且很容易存在錯誤和危險.
比如對于維護程序的人來說,程序員看到一個副本被修改好了,就以為其他所有要修改的地方都已經(jīng)修改好了.因為沒有任何跡象表明還有一份一樣的副本代碼存在,
所以很容易導(dǎo)致遺漏還沒被修改的地方.
消除代碼復(fù)制的兩個基本手段————函數(shù)與父類。
你的程序設(shè)計優(yōu)不優(yōu)秀.就需要定義一些評價設(shè)計的術(shù)語:兩個重要的核心術(shù)語————耦合與聚合.
耦合指的是類與類之間的聯(lián)系.程序設(shè)計的目標(biāo)是一系列通過定義明確的接口通信來協(xié)同工作的類.耦合度反映了這些類聯(lián)系的緊密度.
我們要努力來降低耦合度,或者叫做松耦合.因為耦合度決定了程序修改的難易程度.在一個緊耦合的結(jié)構(gòu)中,對一個類的修改也會導(dǎo)致對其他一些類的修改.
這是我們要努力去避免的,否則,一點小小的改變就可能使整個應(yīng)用程序發(fā)生改變.另外要想找到所需要修改的地方,并一一修改卻是即困難又費時的事情.
另一方面,在一個松耦合的系統(tǒng)中,常常可以修改一個類,但同時不會修改其他類,而且整個程序還可以正常工作.
聚合與程序中一個單獨的單元(可以說是test)所承擔(dān)的任務(wù)的數(shù)量和種類相對應(yīng)有關(guān),它是針對類或方法(函數(shù))這樣大小的程序單元而言的理想情況下,
一個代碼單元應(yīng)該負(fù)責(zé)一個聚合任務(wù)(也就是說,一個任務(wù)可以被看作是一個邏輯單元(logic unit)).一個方法應(yīng)該實現(xiàn)一個邏輯操作,而一個類應(yīng)該代表一定類型的實體.
聚合的重點是重用:如果一個方法或者類是只負(fù)責(zé)一件定義明確的事情,那么就很有可能在另外不同的上下文環(huán)境中使用.