持續(xù)重構(gòu)

在這一年的開發(fā)過程中,從什么都沒有到現(xiàn)在的穩(wěn)定迭代,其中經(jīng)歷了多次的重構(gòu)工作,這里來聊聊其中的一些看法。

我們的模塊,從開始的剛好能夠滿足需求,到后面能夠勝任各種要求,再到最后,簡(jiǎn)單的調(diào)用就可以完美的勝任工作。這是持續(xù)根據(jù)實(shí)際情況思考,經(jīng)過多次重構(gòu)而得到的結(jié)果。

為什么要重構(gòu)

從出發(fā)點(diǎn)來看:

  • 功能缺陷,已經(jīng)很難修復(fù)或者修復(fù)導(dǎo)致代碼更加混亂,希望通過重構(gòu)能夠徹底的解決問題
  • 功能越來越復(fù)雜,代碼越來越多,導(dǎo)致維護(hù)成本非常大

從最終點(diǎn)來看:

  • 統(tǒng)一結(jié)構(gòu),將類似的東西統(tǒng)一,模塊化,避免重復(fù)代碼和相同的bug
  • 細(xì)分功能,將一個(gè)復(fù)雜的功能細(xì)分,減少開發(fā)的復(fù)雜度,增加復(fù)用性
  • 最終的目的都是為了使用者更加簡(jiǎn)單可靠

最佳時(shí)機(jī)

這里我把重構(gòu)最適合的時(shí)機(jī)概括為兩種:

  • 功能爆炸期,當(dāng)功能復(fù)雜化,代碼單純的大量疊加時(shí),必然形成很多復(fù)雜邏輯,并且冗余的代碼
  • 類爆炸期,當(dāng)類似的功能經(jīng)過一定的歸類,導(dǎo)致每種類型的子類型隨著項(xiàng)目進(jìn)行而急劇增加的時(shí)候

以我們的項(xiàng)目經(jīng)驗(yàn)來看,在前幾期的時(shí)候,由于時(shí)間緊張,功能的大量累加,導(dǎo)致一個(gè)復(fù)雜點(diǎn)的頁面就有上千行的代碼,此時(shí)每次改動(dòng)都會(huì)花費(fèi)大量時(shí)間,而且有部分bug不能從根本上解決。這時(shí)候我們開始了第一次的大規(guī)模重構(gòu),主要包含以下幾點(diǎn):

  • 提出組件化框架,拆分頁面代碼,并把之前的一些功能用組件化改寫
  • 統(tǒng)一相似組件,把視覺相似的組件進(jìn)行統(tǒng)一化,并且對(duì)代碼結(jié)構(gòu)進(jìn)行重新歸類
  • 歸納部分相似功能,比如導(dǎo)航欄、頁面頭部的交互變化,網(wǎng)絡(luò)層重新整理

經(jīng)過這次的整理拆分后,已經(jīng)是一個(gè)比較同一的整體了,能夠很好的復(fù)用和修改。

但是經(jīng)過部多個(gè)版本之后,又出現(xiàn)了新的問題。每次對(duì)頁面和功能的特例化,導(dǎo)致相同資源的組件或者功能越來越多,導(dǎo)致每次使用的時(shí)候都不太清楚用哪個(gè)組件比較好。而且每個(gè)組件的接口也有略微的差異,并不能無縫的切換。以及一些原來就存在的,還沒有經(jīng)過拆分的功能。

這次主要做的主要是統(tǒng)一化工作,比如最簡(jiǎn)單的點(diǎn)贊按鈕,在很多地方使用,同時(shí)因?yàn)闅v史原因,很多圖標(biāo)并不是同一個(gè)資源,邏輯規(guī)則也并不統(tǒng)一,接口也不統(tǒng)一。經(jīng)過對(duì)整個(gè)項(xiàng)目的觀察,發(fā)現(xiàn)其實(shí)目前項(xiàng)目中點(diǎn)贊按鈕只有大小兩種樣式,那么使用抽象工廠的方式進(jìn)行歸納,對(duì)外暴露的只有一個(gè)類型,那么這樣使用者就不需要知道其中具體有幾個(gè)組件了。

public class PraiseButton {
+ (instanceType)buttonWithStyle:style;
}

private class _SmallPraiseButton: PraiseButton;
private class _BigPraiseButton: PraiseButton;

而其他組件和功能對(duì)同一個(gè)資源的描述目前也是比較分散,今后也會(huì)按照這樣的方式,按照資源類型進(jìn)行歸類與統(tǒng)一。

重構(gòu)目的

目前來說兩次重構(gòu)的目的是:

  1. 第一次

拆分功能,讓每個(gè)模塊盡可能的簡(jiǎn)單,可復(fù)用;減少復(fù)雜度,減少隱藏的bug;能夠給團(tuán)隊(duì)其他成員使用。

  1. 第二次

合并和歸納功能;統(tǒng)一合并相同資源、功能的接口;減少對(duì)外暴露的實(shí)現(xiàn)細(xì)節(jié);讓使用者面對(duì)的只有一個(gè)對(duì)象,使用更加簡(jiǎn)單;減少理解溝通成本。

猶如讀書時(shí)候老師說的一件事,剛開始讀書的時(shí)候,書是薄的;讀的久了,書就變厚了;當(dāng)你已經(jīng)精通書中所有,書又變薄了。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,839評(píng)論 4 61
  • 中秋月圓夜, 滿庭桂花香。 舉杯同歡慶, 歌舞夜未央。 注1:兒子女兒都回到老家衡東,昨晚全家舉杯同慶,其樂融融,...
    亮靚_27d5閱讀 489評(píng)論 34 49
  • 在去年的春天 一場(chǎng)綿綿的春雨把你澆灌 你偷偷的鉆出了地面 嫩嫩的 綠綠的 你是春的代言 陽光下多么的燦爛 藍(lán)天白云...
    滄海桑田_bc60閱讀 402評(píng)論 0 1
  • 軍師,是負(fù)責(zé)監(jiān)察軍務(wù),參謀軍事的官員,一般作為統(tǒng)帥的副手,負(fù)責(zé)出謀劃策。 我們所熟悉的三國軍師,劉備方面有諸葛亮,...
    指南偵閱讀 4,673評(píng)論 0 3

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