項(xiàng)目發(fā)展到現(xiàn)在已經(jīng)有一年的時(shí)間了,在這一年里,我們的crash free一直都保持的很好(99.5%+)。隨著功能的不斷增加,已經(jīng)老代碼的缺乏維護(hù),逐漸陷入一個(gè)難以維護(hù)的地步,所以需要進(jìn)一步去改善目前的架構(gòu),所以這里談?wù)勔郧暗募軜?gòu)和未來(lái)將要改善的一些方式。
開(kāi)始
最開(kāi)始的階段是完全的MVC,這種結(jié)構(gòu)下最明顯的問(wèn)題就是massive controller。當(dāng)然我們也遇到了這個(gè)問(wèn)題。
此時(shí)我們要解決的問(wèn)題主要有兩點(diǎn):
- 龐大的數(shù)據(jù)量,超長(zhǎng)的頁(yè)面,以及數(shù)據(jù)列表間的不同組合
- 不同頁(yè)面相同數(shù)據(jù)列表的復(fù)用
好在在開(kāi)始的時(shí)候我們就根據(jù)我們項(xiàng)目的一些特殊性進(jìn)行了思考,以及嘗試的幾種組件化方案。所以在1.1的時(shí)候已經(jīng)明確并且解決了這個(gè)問(wèn)題。
C-MVCs
在美學(xué)的表現(xiàn)層組件化之路文章中描述了我們使用DDComponent拆分組件化的方式。
這一次解決了單個(gè)頁(yè)面的多功能模塊拆分問(wèn)題,增加了復(fù)用性,也奠定了未來(lái)半年的穩(wěn)定開(kāi)發(fā)基礎(chǔ)。

組件統(tǒng)一化
隨著時(shí)間的推移,組件越來(lái)越多,導(dǎo)致同一種資源(比如User)擁有多種不同的component,每個(gè)人不同地方都使用了不同的代碼,導(dǎo)致維護(hù)越來(lái)越困難。
所以需要將同一種類(lèi)型的組件進(jìn)行統(tǒng)一化和規(guī)范化。將目前所使用的組件分為特例組件和通用組件,并盡量在這兩個(gè)范圍內(nèi)取用。同時(shí)每個(gè)組件都是經(jīng)過(guò)幾輪黑盒測(cè)試的,所以基本上不太可能出現(xiàn)bug。
但是這樣依然會(huì)有問(wèn)題,在目前應(yīng)用調(diào)整的期間,很多組件都需要重寫(xiě),重寫(xiě)的質(zhì)量就很依賴(lài)個(gè)人了,那么我們統(tǒng)一后的組件依然難以保持很高的質(zhì)量和通用性。
單元測(cè)試
雖然經(jīng)過(guò)上述幾次的改善,目前已經(jīng)沒(méi)有太大問(wèn)題。但其中的隱患一直沒(méi)有被消除,而且在功能的大量增加和人員的變動(dòng),這種隱患就更加明顯了。所以想要在我們的邏輯層加上單元測(cè)試。
關(guān)于實(shí)現(xiàn)方式之前的文章已經(jīng)討論過(guò)了,思路就是拆分Controller層,基本上是采用MVP,是否需要輔助Re方案還要繼續(xù)觀察。

那么最后我們的結(jié)構(gòu)理想中應(yīng)該是這樣

這樣我們將一整個(gè)ViewController拆分為多個(gè)子組件,子組件保持可測(cè)性。
這是目前我們需要去改進(jìn)的。
模塊化
相信,經(jīng)過(guò)上述的改善之后,我們的應(yīng)用應(yīng)該會(huì)趨于一個(gè)比較穩(wěn)定的時(shí)期。那時(shí)的功能也會(huì)比現(xiàn)在多很多,那么就需要模塊化管理,這是后話(huà)了,在一段時(shí)間內(nèi)應(yīng)該還到達(dá)不了如此量級(jí)。