中軟國(guó)際哈爾濱ETC:結(jié)構(gòu)化代碼該怎樣做
作為代碼工作中至關(guān)重要的一環(huán),代碼結(jié)構(gòu)化是頗具難度的。要想寫(xiě)出結(jié)構(gòu)良好的代碼,編寫(xiě)者需要具有正確的思維方式,對(duì)設(shè)計(jì)模式有自己的理解,還得擁有豐富經(jīng)驗(yàn)。通常情況下,要想培養(yǎng)上述能力,你要走的路可不少。
代碼結(jié)構(gòu)化的重要性不應(yīng)被低估,從可讀性和可維護(hù)性的角度來(lái)看,代碼結(jié)構(gòu)非常重要。
經(jīng)驗(yàn)1:提前設(shè)計(jì)
在著手編寫(xiě)代碼之前,你最好考慮一下對(duì)將要構(gòu)建的應(yīng)用程序進(jìn)行提前設(shè)計(jì),統(tǒng)一建模圖表(UML diagrams)就是個(gè)不錯(cuò)的選擇。在編寫(xiě)代碼之前,如果提前有計(jì)劃在手,編寫(xiě)者可以更加專注。通過(guò)提前思考代碼的結(jié)構(gòu),創(chuàng)建一些有用的UML圖表,許多明顯缺陷都可以提前避免。
更重要的是,制定計(jì)劃能讓我們認(rèn)識(shí)到,在編寫(xiě)代碼前還有許多需要編寫(xiě)者思考的事情。UML圖還可以防止代碼編寫(xiě)者“思想游離”,并且防止編寫(xiě)者在代碼里添加自認(rèn)為將來(lái)會(huì)派上用場(chǎng)的非必要功能。
不做計(jì)劃就急著開(kāi)始,在最初你能跑得快一點(diǎn)兒,但跳過(guò)這個(gè)步驟最終會(huì)使你不得不對(duì)大量代碼進(jìn)行重構(gòu),進(jìn)而消耗大量時(shí)間和動(dòng)力。記住,欲速則不達(dá)。
經(jīng)驗(yàn)2:類與函數(shù)準(zhǔn)則
以下準(zhǔn)則可以幫助你保持類與函數(shù)的可讀性及可維護(hù)性:
使類與函數(shù)盡可能地小、類與函數(shù)應(yīng)遵循單一職責(zé)原則
保證類與函數(shù)盡可能小可以使代碼更容易理解。一般來(lái)說(shuō),較大的類和函數(shù)應(yīng)被分解為較小的專門化類別。
遵循單一責(zé)任原則可以幫助你保持類和函數(shù)在較小的級(jí)別,即每個(gè)類、每個(gè)函數(shù)只做一件事。但注意,要在合理范圍內(nèi)劃分得“小”,因?yàn)槎鄶?shù)情況下,過(guò)多的細(xì)小分類反而要比幾個(gè)大類糟糕得多。把函數(shù)分成“獲取、處理及存儲(chǔ)數(shù)據(jù)”這樣的大型函數(shù)是行不通的。你必須將此函數(shù)分成三個(gè)較小的函數(shù):分別用于提取、處理和數(shù)據(jù)存儲(chǔ)。
經(jīng)驗(yàn)3:使用設(shè)計(jì)模式
了解設(shè)計(jì)模式及其工作方式可以幫助你編寫(xiě)出更加結(jié)構(gòu)化、更具可讀性與可維護(hù)性的代碼。如果你清楚在哪些情況下可以使用哪種設(shè)計(jì)模式,就不必非得自己想解決辦法了,你只需遵循設(shè)計(jì)原則就可以保持代碼的整潔。
不過(guò)要注意,不要過(guò)度使用設(shè)計(jì)模式,這是使用這種方法時(shí)最常見(jiàn)的陷阱。盡管在特定情況下可以使用設(shè)計(jì)模式,但過(guò)度使用設(shè)計(jì)模式對(duì)編寫(xiě)者來(lái)說(shuō)有弊無(wú)利,它會(huì)使應(yīng)用過(guò)度機(jī)械化,其他開(kāi)發(fā)人員會(huì)很難理解代碼。
經(jīng)驗(yàn)4:代碼規(guī)范
代碼結(jié)構(gòu)化在很大程度上與代碼規(guī)范有關(guān)。對(duì)于每個(gè)項(xiàng)目來(lái)說(shuō),代碼規(guī)范都是必要,如果沒(méi)有代碼規(guī)范,代碼變得團(tuán)團(tuán)亂以至難以閱讀是遲早的事。
我們可以列出代碼規(guī)范清單,記錄下聲明變量的方法、命名規(guī)范等。你可以無(wú)限向列表中添加規(guī)則,規(guī)則的數(shù)量也是可以變化的,只列出對(duì)你和對(duì)你的團(tuán)隊(duì)有幫助的規(guī)則便可。團(tuán)隊(duì)成員也可以隨時(shí)向規(guī)范列表中添加或移除規(guī)則。
制定好規(guī)范清單后,就堅(jiān)持照做吧!
經(jīng)驗(yàn)5:編寫(xiě)單元測(cè)試
編寫(xiě)單元測(cè)試能產(chǎn)生不錯(cuò)的預(yù)期外的效果,它讓你必須對(duì)代碼進(jìn)行結(jié)構(gòu)化處理。為了能夠編寫(xiě)出單元測(cè)試,至少要保證代碼的結(jié)構(gòu)是正確的。
也許你以前聽(tīng)說(shuō)過(guò)或者編寫(xiě)過(guò)不可測(cè)試代碼,如果有哪段代碼讓你不知道該如何編寫(xiě)單元測(cè)試的話,可能是因?yàn)檫@段代碼功能過(guò)多,或者寫(xiě)得太差。
不管是上述兩種情況的哪一種,只有一個(gè)原因會(huì)導(dǎo)致代碼無(wú)法測(cè)試,那就是糟糕的結(jié)構(gòu)。遇到不可測(cè)試的代碼時(shí),你會(huì)發(fā)現(xiàn)自己大部分時(shí)間都用在了重構(gòu)上。單元測(cè)試便可以作為一種限制,使你必須將代碼進(jìn)行結(jié)構(gòu)化處理。
實(shí)現(xiàn)代碼結(jié)構(gòu)化有好些方式。在你鍵入第一個(gè)代碼字母之前就開(kāi)始了,包括提前考慮應(yīng)用程序的設(shè)計(jì)、創(chuàng)建幫助編寫(xiě)者消除明顯缺陷的UML圖等。
只要你準(zhǔn)備編寫(xiě)代碼,就應(yīng)該確保擁有一份可以遵守的代碼規(guī)范表。學(xué)習(xí)使用設(shè)計(jì)模式也可以進(jìn)一步幫你實(shí)現(xiàn)這個(gè)目標(biāo)。同時(shí),你還需保持類與函數(shù)單位較小,并且讓這些類與函數(shù)只做一件事。最后,要養(yǎng)成編寫(xiě)單元測(cè)試的習(xí)慣,不這樣做最終只會(huì)得到一堆不可測(cè)試的代碼。
要更認(rèn)真地對(duì)待代碼結(jié)構(gòu)化了!