我的重構(gòu)感悟

在三年前我就讀了《重構(gòu)改善既有代碼的設(shè)計(jì)》鼻疮,里面寫了很多有關(guān)代碼重構(gòu)的技巧琳水,知易行難!我整理了一下重構(gòu)給我的感悟吊档。

NO.1是什么導(dǎo)致的重構(gòu)篙议?

為業(yè)務(wù)的改變而調(diào)整

這是一個(gè)最合理的原因,我們無法預(yù)料到業(yè)務(wù)的發(fā)展怠硼,我們當(dāng)下制定的業(yè)務(wù)職責(zé)和邊界鬼贱,對于一個(gè)快速發(fā)展的項(xiàng)目,能應(yīng)對半年的情況香璃,已經(jīng)是一件相當(dāng)不容易的事情这难。正如我們業(yè)務(wù)發(fā)展開始的時(shí)候,能承受起幾千個(gè)用戶葡秒。而當(dāng)有十幾萬用戶的時(shí)候姻乓,系統(tǒng)承受的壓力是遠(yuǎn)遠(yuǎn)的不一樣的。

為自己or別人的錯(cuò)誤埋單眯牧!

代碼是由程序員創(chuàng)造糖权,我們?nèi)绻缓煤媒逃a,一旦讓它成為令人抓狂的“熊孩子”炸站,最終的惡果還是我們自己承受星澳。我也會吐槽自己寫過的代碼,畢竟編程技巧是一項(xiàng)技藝旱易,需要日復(fù)一日的不斷磨練禁偎,需要承受自己給自己帶來的坑腿堤,才會學(xué)會成長。作為一名及格的程序員不能把重構(gòu)時(shí)刻掛在嘴邊如暖,正如教育孩子更多是需要言傳身教笆檀,以身作則。所以我們要將重構(gòu)徹底融入到每一句代碼中盒至,我們既是在不斷寫新的業(yè)務(wù)酗洒,也是不斷在重構(gòu)我們的代碼。

“無奈”的架構(gòu)師

很多公司招了一個(gè)牛逼的架構(gòu)師枷遂,怎么可以在短時(shí)間內(nèi)向公司證明自己的能力樱衷?重構(gòu)無疑是一條快捷的出路。

因?yàn)楣局暗募軜?gòu)已經(jīng)不能適應(yīng)公司發(fā)展酒唉,導(dǎo)致了公司業(yè)務(wù)發(fā)展不順矩桂。聽說過有些創(chuàng)業(yè)公司,每招來一個(gè)架構(gòu)師痪伦,就把之前的代碼進(jìn)行重構(gòu)一次的事例侄榴。但是這種重構(gòu),更多的是重寫网沾,而不是重構(gòu)癞蚕。但這種重寫,往往由于架構(gòu)師對業(yè)務(wù)缺乏深度的認(rèn)識和充裕的時(shí)間辉哥,帶來了斷崖般的崩塌涣达,因?yàn)樵谥貙懙倪^程中,bug層出不窮证薇,導(dǎo)致業(yè)務(wù)極其不穩(wěn)定度苔。這也是一些人對重構(gòu)嗤之以鼻的情況的根源。

NO.2重構(gòu)前提條件是什么浑度?

全盤熟悉代碼寇窑,掌控業(yè)務(wù)。

接手別人的項(xiàng)目時(shí)箩张,在看到混亂不堪的代碼后甩骏,不要一上來就開始大動干戈。先熟悉代碼架構(gòu)先慷,如果一個(gè)代碼架構(gòu)都混亂不堪饮笛,那就多費(fèi)點(diǎn)勁,將代碼好好得梳理一遍论熙,如果有詳細(xì)地文檔的話福青,配合文檔一起閱讀的效果會更好。但是現(xiàn)實(shí)卻是,你不得不去閱讀一些令你感到莫名其妙的代碼无午,然后自己去整理文檔媒役。慢慢熟悉一個(gè)項(xiàng)目的業(yè)務(wù)邏輯,梳理清楚業(yè)務(wù)內(nèi)部之間的關(guān)系宪迟。如果你不熟悉業(yè)務(wù)酣衷,不熟悉代碼,來講重構(gòu)次泽,無疑是重寫的罷了穿仪。

時(shí)間!

在你尚沒能熟練《重構(gòu)》的各項(xiàng)技巧之前意荤,請首先明白你當(dāng)下是否有充足的時(shí)間啊片,畢竟高效完成工作才是最重要的。在工作中袭异,其他人更多只會關(guān)心的是程序員的產(chǎn)出:項(xiàng)目的穩(wěn)定快速迭代,但是熟練技巧需要大量的練習(xí)時(shí)間炬藤。而大型的重構(gòu)御铃,則需要更加多的人力物力的投入。

NO.4重構(gòu)的目標(biāo)是什么沈矿?

標(biāo)準(zhǔn)化

在不斷地編碼過程中上真,遇到的重復(fù)的問題會越來越多,而各類語言框架正是將標(biāo)準(zhǔn)化的一種體現(xiàn)羹膳。而對遇到的重復(fù)問題進(jìn)行標(biāo)準(zhǔn)化處理睡互,除了能讓我們避免重復(fù)勞動提高開發(fā)效率,及讓我們將一些業(yè)務(wù)進(jìn)行層次分工陵像。在標(biāo)準(zhǔn)化的過程中就珠,主要做的是將業(yè)務(wù)職責(zé)劃分清楚,避免混亂不堪的界面醒颖。

標(biāo)準(zhǔn)化是一個(gè)很漫長的過程妻怎,收益很明顯,但是正如企業(yè)的架構(gòu)一樣泞歉,當(dāng)面臨調(diào)整的時(shí)候逼侦,也會面臨重大的挑戰(zhàn)。當(dāng)我們面臨將已經(jīng)標(biāo)準(zhǔn)化的代碼架構(gòu)進(jìn)行重構(gòu)的時(shí)候腰耙,這樣的重構(gòu)成本會相當(dāng)?shù)母唛欢K栽谥贫?biāo)準(zhǔn)化中需要嚴(yán)格按照“SOLID”的原則下進(jìn)行。雖然這是有點(diǎn)古老的原則挺庞,但是沒有這些原則指導(dǎo)晰赞,制定的標(biāo)準(zhǔn)化,寸步難行。

更好宾肺,更快

無論在什么情況下溯饵,在編程里面完成任務(wù)是重中之重(重要的事情要重復(fù)一下)。只有先完成锨用,我們才能去說追求更多——讓程序運(yùn)行的更好丰刊,更快。要做到這個(gè)目標(biāo)增拥,必須要在時(shí)間復(fù)雜度和空間復(fù)雜度上下更多的功夫啄巧。這是《數(shù)據(jù)結(jié)構(gòu)》這門課程最基礎(chǔ)、最簡單掌栅,也是貫通全書的知識點(diǎn)秩仆。最近在閱讀《Redis設(shè)計(jì)與實(shí)現(xiàn)》一書的時(shí)候,更是充分地了解到這兩點(diǎn)的重要猾封,幾乎是所有操作都是O(1)的時(shí)間復(fù)雜度澄耍,在它各種數(shù)據(jù)結(jié)構(gòu)和對象的實(shí)現(xiàn)上,都體現(xiàn)了盡量少的存儲空間做盡量多的事情晌缘。Do less,get more!

我們雖然謹(jǐn)記時(shí)間復(fù)雜度和空間復(fù)雜度齐莲,但是不能絕對強(qiáng)調(diào)。更好磷箕、更快不是單單指這兩個(gè)基礎(chǔ)指標(biāo)选酗,還有代碼的可讀性、可擴(kuò)展性岳枷,還有業(yè)務(wù)之間的耦合度和業(yè)務(wù)自身的高內(nèi)聚芒填。如關(guān)系型的數(shù)據(jù)庫一樣,絕對的范式設(shè)計(jì)只會存在于實(shí)驗(yàn)室空繁。在現(xiàn)實(shí)的項(xiàng)目中殿衰,為了提高開發(fā)效率和查詢速度,我們會根據(jù)實(shí)際需要設(shè)計(jì)冗余的數(shù)據(jù)表盛泡。所以播玖,在實(shí)際開發(fā)中我們總要適當(dāng)?shù)倪M(jìn)行取舍,根據(jù)業(yè)務(wù)的特性和實(shí)際場景饭于,犧牲一些時(shí)間復(fù)雜度和空間復(fù)雜度蜀踏,以達(dá)到整體更高的收益。

NO.5重構(gòu)帶來了什么掰吕?

開發(fā)效率的極大提升

之前有一段時(shí)間果覆,有好幾個(gè)項(xiàng)目我需要同時(shí)開發(fā),但是我都可以完全輕松的掌控殖熟,而且是保質(zhì)保量地按時(shí)完成了開發(fā)任務(wù)局待。因?yàn)槲以诓粩嗟刂貥?gòu)中,整理出了一套自己的編碼標(biāo)準(zhǔn),在這套編碼標(biāo)準(zhǔn)下钳榨,設(shè)計(jì)好了代碼思路后舰罚,進(jìn)入了編程階段的我無需過多的進(jìn)行思考,只要我按照自己制定好的道路和代碼層次去簡單編碼即可薛耻。而在測試階段出了一些bug营罢,更多的是產(chǎn)品設(shè)計(jì)上的缺陷而需要產(chǎn)品完善的地方。
對于目前來說饼齿,寫一個(gè)新的業(yè)務(wù)饲漾,就是在一個(gè)零零散散的積木進(jìn)行快速拼湊,再為這個(gè)項(xiàng)目添加上它自身的特有的色彩即可缕溉。

開發(fā)思路的改變

對于我而言考传,我是在完善自己的代碼工具庫。首先如何將一些常見的代碼邏輯進(jìn)行不斷抽象進(jìn)行封裝证鸥,變成自己的工具僚楞;如何將自己的工具變得更加快捷便利,當(dāng)下的工具是否需要進(jìn)行調(diào)整來適應(yīng)業(yè)務(wù)發(fā)展枉层;在什么業(yè)務(wù)場景下泉褐,哪些工具可以復(fù)用或者抽取形成一個(gè)微服務(wù)。

NO.6重構(gòu)邊界

在《重構(gòu)》中說到返干,重構(gòu)是在時(shí)刻進(jìn)行著的兴枯。對于個(gè)人開發(fā)業(yè)務(wù)而言血淌,這是正確的矩欠,因?yàn)樾枨笥|發(fā)改變。但是對于整體架構(gòu)而言悠夯,我們更多的是在固定的框架下癌淮,默默耕耘。

正如在一棟樓房里面沦补,我們可以花一天的時(shí)間對其中一個(gè)房間進(jìn)行重新擺設(shè)乳蓄,而對整棟樓房的影響近乎微乎其微。因?yàn)槊總€(gè)人有自己的風(fēng)格夕膀,對房間按照自己的心意進(jìn)行重構(gòu)虚倒,無可厚非。但是要對整棟樓房進(jìn)行重構(gòu)产舞,那是一個(gè)極其漫長的過程魂奥,再者,如果業(yè)務(wù)沒有達(dá)到飛躍性的增長易猫,整棟樓房的堅(jiān)固穩(wěn)定尤其重要耻煤,畢竟人都要舒舒服服地住在里面,誰能容忍,三天兩頭在自己家里進(jìn)行裝修哈蝇?

故此棺妓,重構(gòu)的邊界顯而易見!其實(shí)當(dāng)“人口”激增了炮赦,一棟樓房不能再適應(yīng)的時(shí)候怜跑,如果有充裕的時(shí)間和地方,重建一棟無疑是最好的選擇眼五。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妆艘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子看幼,更是在濱河造成了極大的恐慌批旺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诵姜,死亡現(xiàn)場離奇詭異汽煮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)棚唆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門暇赤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宵凌,你說我怎么就攤上這事鞋囊。” “怎么了瞎惫?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵溜腐,是天一觀的道長。 經(jīng)常有香客問我瓜喇,道長挺益,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任乘寒,我火速辦了婚禮望众,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伞辛。我一直安慰自己烂翰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布蚤氏。 她就那樣靜靜地躺著甘耿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞧捌。 梳的紋絲不亂的頭發(fā)上棵里,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天润文,我揣著相機(jī)與錄音,去河邊找鬼殿怜。 笑死典蝌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的头谜。 我是一名探鬼主播骏掀,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柱告!你這毒婦竟也來了截驮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤际度,失蹤者是張志新(化名)和其女友劉穎葵袭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乖菱,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坡锡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窒所。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹉勒。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吵取,靈堂內(nèi)的尸體忽然破棺而出禽额,到底是詐尸還是另有隱情,我是刑警寧澤皮官,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布脯倒,位于F島的核電站,受9級特大地震影響臣疑,放射性物質(zhì)發(fā)生泄漏盔憨。R本人自食惡果不足惜徙菠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一讯沈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婿奔,春花似錦缺狠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冰木,卻和暖如春穷劈,著一層夾襖步出監(jiān)牢的瞬間笼恰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工歇终, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留社证,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓评凝,卻偏偏與公主長得像追葡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子奕短,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 最近一直在從事一款iOS的app的開發(fā)工作宜肉。為了提高團(tuán)隊(duì)整體的代碼質(zhì)量,從項(xiàng)目開始我就一直擔(dān)負(fù)著代碼審查重構(gòu)的工...
    Ifdef_Max閱讀 1,766評論 1 13
  • 摘要: 最近一直在從事一款iOS的app的開發(fā)工作翎碑。為了提高團(tuán)隊(duì)整體的代碼質(zhì)量,從項(xiàng)目開始我就一直擔(dān)負(fù)著代碼審查...
    明謠_羅瀟閱讀 159評論 1 0
  • 本文為轉(zhuǎn)載 第一個(gè)層次:業(yè)務(wù)架構(gòu)的審查重構(gòu) 這是最高層次的代碼審查重構(gòu)谬返。其實(shí),這個(gè)階段的審查并未真正涉及到具體的代...
    _源計(jì)劃閱讀 326評論 0 0
  • 引言 Martin Fowler的《重構(gòu):改善既有代碼的設(shè)計(jì)》一書從問世至今已有十幾年時(shí)間了日杈,按照計(jì)算機(jī)領(lǐng)域日新月...
    MagicBowen閱讀 5,016評論 3 10
  • 久違的晴天朱浴,家長會。 家長大會開好到教室時(shí)达椰,離放學(xué)已經(jīng)沒多少時(shí)間了翰蠢。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,493評論 16 22