在這一年的開發(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)的目的是:
- 第一次
拆分功能,讓每個(gè)模塊盡可能的簡(jiǎn)單,可復(fù)用;減少復(fù)雜度,減少隱藏的bug;能夠給團(tuán)隊(duì)其他成員使用。
- 第二次
合并和歸納功能;統(tǒng)一合并相同資源、功能的接口;減少對(duì)外暴露的實(shí)現(xiàn)細(xì)節(jié);讓使用者面對(duì)的只有一個(gè)對(duì)象,使用更加簡(jiǎn)單;減少理解溝通成本。
猶如讀書時(shí)候老師說的一件事,剛開始讀書的時(shí)候,書是薄的;讀的久了,書就變厚了;當(dāng)你已經(jīng)精通書中所有,書又變薄了。