你需要的不是重构,而是理清业务逻辑(转)
最近我遇到了一位以前公司的同事。他提到了數(shù)年前我在那個(gè)公司曾經(jīng)開(kāi)發(fā)過(guò)的項(xiàng)目。他說(shuō)這個(gè)項(xiàng)目現(xiàn)在已經(jīng)變成了“職業(yè)殺手”。基本上,任何接觸過(guò)這個(gè) “職業(yè)殺手”項(xiàng)目的人最終都會(huì)離開(kāi)這個(gè)公司。如果公司想讓名下的程序員人數(shù)>0,唯一的辦法就是花數(shù)月時(shí)間完全重構(gòu)這個(gè)系統(tǒng)。
對(duì)于這事我有兩點(diǎn)要說(shuō)。首先,在我離開(kāi)這個(gè)公司前,這個(gè)系統(tǒng)的單元測(cè)試覆蓋率已經(jīng)達(dá)到了85%,所以,不要責(zé)備我。第二,這么大規(guī)模的重構(gòu)?肯定會(huì)出問(wèn)題。
每 一個(gè)系統(tǒng)里都至少有一個(gè)成為人民公敵、讓所有人害怕的組件。它承載了太多的任務(wù),它擁有太多狀態(tài),太多的其它組件調(diào)用它。當(dāng)時(shí)間到了償還技術(shù)債務(wù)的時(shí)候, 人人都會(huì)把目光投向這個(gè)組件。然而,如果你對(duì)這個(gè)組件只有一個(gè)不全面的理解,你放下所有工作來(lái)完全重構(gòu)它,那你成功的幾率會(huì)很小。這個(gè)組件,就就它表現(xiàn)出 來(lái)的令人恐怖的程度和復(fù)雜相比,它的實(shí)際情況會(huì)比你想象更復(fù)雜,更恐怖。
你認(rèn)為這個(gè)組件是如何發(fā)展成這樣一個(gè)不幸的狀態(tài)的?是因?yàn)楣竟陀?了一個(gè)笨蛋,讓他肆無(wú)忌憚的往系統(tǒng)里增加復(fù)雜度?或是因?yàn)檫@個(gè)組件最初設(shè)計(jì)的太抽象,由于多年來(lái)需求的變更,它的責(zé)任范圍不斷的擴(kuò)大?(出于個(gè)人的自尊, 我寧愿相信這個(gè)“職業(yè)殺手”屬于后者)。十有八九,這個(gè)組件變成如今這個(gè)恐怖的狀態(tài),都有由“聰明人”的一些“好意”造成的。如果你決定做一次大的重構(gòu), 你實(shí)際是欠下了另一筆技術(shù)債務(wù)留給后人。
為了能真正的徹底償還這筆債務(wù),你需要去分解這個(gè)系統(tǒng)的復(fù)雜度。你需要花時(shí)間尋找所有調(diào)用這個(gè)組件 的客戶端。你需要花時(shí)間跟你的同事交流,了解這個(gè)這個(gè)組件的歷史和它是如何被使用的。你需要簡(jiǎn)化這個(gè)組件的周邊環(huán)境,看看它是如何運(yùn)作的。每周,你都需要 花更多的時(shí)間來(lái)更清楚的了解這個(gè)組件的業(yè)務(wù)。只要有足夠長(zhǎng)的時(shí)間跨度,你最終能理清所有復(fù)雜的問(wèn)題。
從實(shí)際方法上說(shuō),這個(gè)問(wèn)題應(yīng)該怎么辦?與其現(xiàn)在花3個(gè)整月的時(shí)間做一次完全的重構(gòu),不如先用一個(gè)季度的時(shí)間做清理工作。最后還是要重寫,但有了3個(gè)月的計(jì)劃準(zhǔn)備,你有了時(shí)間去分析和設(shè)計(jì)。你有了時(shí)間來(lái)理清業(yè)務(wù)。
[英文原文:It's Not Refactoring, It's Untangling ]總結(jié)
以上是生活随笔為你收集整理的你需要的不是重构,而是理清业务逻辑(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: run-time cloud serve
- 下一篇: nagios监控windows USBK