重構(gòu)
在應(yīng)用程序的整個(gè)生命周期中躺酒,我們夠可以使用重構(gòu)河质。
持續(xù)學(xué)習(xí)使我們經(jīng)常聽(tīng)到的一句話冀惭,這句話也非常試用于重構(gòu)震叙。例如重構(gòu)可以獲得更好的模型
重構(gòu)是一步步的執(zhí)行小的,眾所周知的變更散休,以改變現(xiàn)有代碼的設(shè)計(jì)媒楼,既不改變顯性的行為的情況獲得可維護(hù)性質(zhì)。換句話說(shuō)就是:改變方式戚丸,但不改變內(nèi)容
簡(jiǎn)單地說(shuō)重構(gòu)就是把糟糕的代碼轉(zhuǎn)化為良好的划址,可維護(hù)的代碼,就是這么簡(jiǎn)單限府,因此我們不必在前期就給出一個(gè)完美的架構(gòu)或者答案夺颤。這是一個(gè)好消息,因?yàn)闊o(wú)論我們?nèi)绾卧O(shè)計(jì)都不會(huì)達(dá)到完美的狀態(tài)(可以證明嗎胁勺?)世澜。
我們?cè)谧R(shí)別糟糕的代碼方面幾乎人人都是高手,沒(méi)有問(wèn)題署穗,但是重點(diǎn)在于如何修復(fù)他寥裂。在我看來(lái)應(yīng)該在一發(fā)現(xiàn)問(wèn)題之后就立馬進(jìn)行處理,我們應(yīng)該使用重構(gòu)案疲。因?yàn)槿绻粚?duì)代碼進(jìn)行持續(xù)維護(hù)封恰,那么他將退化和崩潰,就像房子一樣的络拌。如果在bug修復(fù)和功能擴(kuò)展期間如果不使用重構(gòu)俭驮,那么可以想象在不遠(yuǎn)的將來(lái)將會(huì)發(fā)生什么情況回溺。所以理解軟件的生命周期很重要春贸,能夠在更高的層次掌握軟件開(kāi)發(fā)的核心。塵封不動(dòng)的代碼將滋生bug
如何使用重構(gòu)
正如文章開(kāi)頭的第一句話所說(shuō)遗遵,在軟件開(kāi)發(fā)的整個(gè)生命周期中都可以使用重構(gòu)萍恕。假如我們不使用重構(gòu),而沿用前期的车要,傳統(tǒng)的設(shè)計(jì)為重點(diǎn)的過(guò)程方法允粤,我們?cè)诔跏蓟敿?xì)設(shè)計(jì)階段反復(fù)琢磨,花費(fèi)大量時(shí)間翼岁,創(chuàng)建大量的UML类垫,作為結(jié)果我們希望在后期的軟件開(kāi)發(fā)中過(guò)程會(huì)變得很順利和快速,但即使是這樣琅坡,代碼還是會(huì)有變得很糟糕的風(fēng)險(xiǎn)悉患。
相反我們應(yīng)該接受這樣一個(gè)事實(shí),我們不可能在一開(kāi)始就設(shè)計(jì)的很完美正確榆俺,另一種略微不同的方法是將一些工作從初始詳細(xì)設(shè)計(jì)階段轉(zhuǎn)移到開(kāi)發(fā)過(guò)程中去(這種情況所有的開(kāi)發(fā)人員都是設(shè)計(jì)人員)售躁,并且準(zhǔn)備好持續(xù)學(xué)習(xí)坞淮,當(dāng)了解到更多的內(nèi)容的時(shí)候進(jìn)行持續(xù)的重構(gòu),在我們開(kāi)發(fā)的過(guò)程中陪捷,我們會(huì)學(xué)習(xí)到更多的東西回窘,此時(shí)進(jìn)行重構(gòu)的設(shè)計(jì),會(huì)做的更正確市袖,也的確符合我們?nèi)粘i_(kāi)發(fā)的模式啡直,所以重構(gòu)的使用很重要。
因此苍碟,與其進(jìn)行更多的推測(cè)的詳細(xì)設(shè)計(jì)付枫,不如進(jìn)行更多的學(xué)習(xí)和驗(yàn)證,并反復(fù)重構(gòu)
1. 重構(gòu) + TDD = 事實(shí)
為了安全的重構(gòu)驰怎,我們必須執(zhí)行全面的測(cè)試阐滩,如果不這樣做,這將會(huì)引入bug县忌。
使用TDD+重構(gòu)來(lái)修復(fù)bug是一張好的思想掂榔,首先是紅色的來(lái)暴露bug,然后修復(fù)bug成為綠色症杏,然后重構(gòu)就算是成功了装获。
最后:領(lǐng)域模型DDD非常適合TDD