漫談項(xiàng)目設(shè)計(jì)&重構(gòu)&性能優(yōu)化

重構(gòu)的好處:

重構(gòu)能夠改進(jìn)軟件設(shè)計(jì),隨著項(xiàng)目需求的變更,項(xiàng)目體積的變大早已與最初的設(shè)計(jì)大相徑庭,代碼結(jié)構(gòu)變得凌亂、復(fù)雜,如果不進(jìn)行重構(gòu),則很難添加新的功能。

1、使項(xiàng)目代碼更容易理解

很多情況下是由于項(xiàng)目趕進(jìn)度和不注重質(zhì)量導(dǎo)致的。那么通過(guò)重構(gòu)可以幫助代碼維持自己該有的形態(tài)。

項(xiàng)目開(kāi)始的時(shí)候,設(shè)計(jì)并沒(méi)有考慮到方方面面,因?yàn)槟悴豢赡茴A(yù)測(cè)到后面的所有需求。同時(shí)你也不能把每個(gè)功能都做預(yù)留,做成靈活可變,如果最后你預(yù)測(cè)失敗,那么意味著你所做的靈活性是多余的,浪費(fèi)了時(shí)間且增加了開(kāi)發(fā)難度。這種情況叫做過(guò)度設(shè)計(jì)。

為了避免這樣的情況,項(xiàng)目之初只做必要的設(shè)計(jì)。隨著項(xiàng)目的變更,軟件結(jié)構(gòu)需要重新調(diào)整。通過(guò)重構(gòu)可以改良最初的設(shè)計(jì),使得項(xiàng)目符合最新的需求。

經(jīng)驗(yàn)告訴我們,當(dāng)下只管建造可運(yùn)行的最簡(jiǎn)化的系統(tǒng),至于靈活而復(fù)雜的設(shè)計(jì),多數(shù)時(shí)候你都不會(huì)需要它。

2、幫助你找到BUG

重構(gòu)需要你深入代碼結(jié)構(gòu),這樣使得你搞清楚程序結(jié)構(gòu)的同時(shí),找出隱含的BUG。

3、重構(gòu)提高編碼速度

重構(gòu)后的代碼,代碼結(jié)構(gòu)被改良,良好的設(shè)計(jì)能夠加快開(kāi)發(fā)速度。

重構(gòu)與性能優(yōu)化:

重構(gòu)是為了讓代碼易于理解,你常會(huì)做出一些使程序運(yùn)行變慢的修改。

重構(gòu)的過(guò)程中,不要同時(shí)最求優(yōu)化性能。特別當(dāng)重構(gòu)代碼優(yōu)化與性能優(yōu)化兩者出現(xiàn)沖突的時(shí)候

通常情況下重構(gòu)會(huì)使代碼優(yōu)雅,性能優(yōu)化為了提高性能不得不采用一些技巧來(lái)實(shí)現(xiàn)從而有可能使得代碼變得復(fù)雜

而且,有時(shí)性能好壞不是單憑感覺(jué)出來(lái),多了幾個(gè)for循環(huán)帶來(lái)的性能下降通常沒(méi)有你想象中那么大,一定要量化,能測(cè)出數(shù)據(jù)來(lái)證明是否由此導(dǎo)致的性能下降。

此時(shí)要注意我們的目的是重構(gòu),重構(gòu)的手法可能會(huì)使得軟件性能有所下降,也應(yīng)該往下執(zhí)行。

性能優(yōu)化屬于另外一個(gè)關(guān)注點(diǎn),等重構(gòu)完成后,項(xiàng)目設(shè)計(jì)良好,此時(shí)再去做性能優(yōu)化也更容易。

若僅憑感覺(jué)來(lái)決定說(shuō)為了提高性能而放棄重構(gòu)代碼,這是一個(gè)錯(cuò)誤的想法。

正確的做法是:

首先寫(xiě)出可運(yùn)行的軟件,然后調(diào)整它以求獲得更快的速度。

如果當(dāng)你在開(kāi)發(fā)的過(guò)程中時(shí)刻追求軟件的性能,首先會(huì)導(dǎo)致開(kāi)發(fā)難度增加、開(kāi)發(fā)時(shí)間變長(zhǎng)。同時(shí)大多數(shù)情況下來(lái)分析,你會(huì)發(fā)現(xiàn)你花費(fèi)的大部分時(shí)間都是在調(diào)整一些小部分的代碼上以追求性能的增加,實(shí)際上這小部分代碼最終被執(zhí)行的概率沒(méi)有你想象中的那么頻繁。這意味著你大部分時(shí)間做的是無(wú)用功。

你所做的性能優(yōu)化是你臆想出來(lái)的。

只有當(dāng)你做出可運(yùn)行的項(xiàng)目,并且對(duì)整個(gè)項(xiàng)目結(jié)構(gòu)了解清楚之后,知道性能瓶頸在哪,有針對(duì)性的進(jìn)行優(yōu)化,通常會(huì)有意想不到的收獲。

何時(shí)重構(gòu):

重構(gòu)可以隨時(shí)進(jìn)行,不一定要專門(mén)騰出時(shí)間來(lái)進(jìn)行重構(gòu)。(當(dāng)然,你也可以這么做,前提是團(tuán)隊(duì)的意見(jiàn)是一致,并征得老板同意,說(shuō)服老板重構(gòu)能夠改良設(shè)計(jì)不僅代碼質(zhì)量提高同時(shí)加快開(kāi)發(fā)速度。)

但注意一定要將重構(gòu)和添加功能的兩種狀態(tài)進(jìn)行劃分,在重構(gòu)的時(shí)候不要添加功能。否則你不知道BUG是重構(gòu)時(shí)導(dǎo)致還是添加功能時(shí)導(dǎo)致,增加重構(gòu)的難度。

這兩種狀態(tài)可以來(lái)回切換,但不能重疊。

何時(shí)不該重構(gòu):

項(xiàng)目已近最后期限,因?yàn)橐呀?jīng)沒(méi)有足夠的時(shí)間重構(gòu)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評(píng)論 25 709
  • 1、hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得java程序...
    StoneHell閱讀 312評(píng)論 0 0
  • 三年后的自己: 你還好嗎?這時(shí)的你是否已然踏出了新的步伐,呼吸著新鮮的空氣了呢?是否做著自己想做的事情,過(guò)...
    消失了的三年半閱讀 945評(píng)論 0 3
  • 星期二 我是102號(hào)星寶寶,正在參加小牛媽媽日記星球21天蛻變之旅課程訓(xùn)練。這是我第140篇原創(chuàng)日記。相信水滴穿石...
    ABC輔導(dǎo)歐陽(yáng)閱讀 692評(píng)論 2 0

友情鏈接更多精彩內(nèi)容