1.組件化的目的是什么凳枝?
最近一兩年很多人都想在項(xiàng)目里面搞組件化抄沮,覺得搞組件化好跋核,卻鮮有人知道組件化好在哪里?組件化的目的是什么叛买?個(gè)人覺得組件化主要有兩個(gè)目的:
1.實(shí)現(xiàn)項(xiàng)目代碼的高內(nèi)聚低耦合砂代;
2.方便多人多團(tuán)隊(duì)開發(fā)(這就是大團(tuán)隊(duì)為什么那么熱衷于組件化的原因,對(duì)開發(fā)的效率的提升是十分顯著的)率挣。
2.我的項(xiàng)目組件化應(yīng)該做到什么程度刻伊?
個(gè)人認(rèn)為組件化的程度取決于項(xiàng)目的大小,當(dāng)一個(gè)項(xiàng)目一個(gè)人可以輕松開發(fā)和維護(hù)時(shí)椒功,只需要項(xiàng)目架構(gòu)保持如下圖即可:
把基礎(chǔ)層的部分抽成組件捶箱,用cocoapods來維護(hù),實(shí)現(xiàn)基礎(chǔ)層與表現(xiàn)層蛾茉,業(yè)務(wù)層去耦合讼呢,業(yè)務(wù)層與表現(xiàn)層依然耦合撩鹿。
當(dāng)項(xiàng)目變的越來越大谦炬,功能模塊越來越多,需要五到十幾個(gè)人維護(hù)的時(shí)候节沦,就需要明確組織里的每個(gè)人負(fù)責(zé)的功能模塊键思,在代碼層面也需要業(yè)務(wù)層和表現(xiàn)層區(qū)分開來,業(yè)務(wù)層和業(yè)務(wù)層之間也要區(qū)分開來甫贯,表現(xiàn)層與表現(xiàn)層之間也要區(qū)分開來吼鳞,要想做到這些,需要做很多的工作叫搁,首先要?jiǎng)澐趾霉δ苣K赔桌,保證一個(gè)模塊的表現(xiàn)層和業(yè)務(wù)層代碼在一個(gè)文件夾;然后一個(gè)模塊下的表現(xiàn)層和業(yè)務(wù)層邏輯要有一個(gè)明顯的區(qū)分渴逻;再引入一個(gè)中間件比如CTMediator疾党,作者自己寫的中間件基于CTMediator的ZZRouter,中間件用cocoapods來維護(hù)惨奕;每個(gè)模塊根據(jù)中間件提供外部調(diào)用的接口雪位,本模塊調(diào)用外部模塊,一律使用中間件來調(diào)梨撞,實(shí)現(xiàn)模塊間的去耦合雹洗。中型項(xiàng)目的理想架構(gòu)應(yīng)該如下圖:
當(dāng)一個(gè)app成為超級(jí)app需要多個(gè)團(tuán)隊(duì)共同協(xié)作開發(fā)的時(shí)候,對(duì)組件化的要求又更高了卧波,這個(gè)時(shí)候需要實(shí)現(xiàn)模塊的獨(dú)立編譯时肿,以及在主項(xiàng)目中的靜態(tài)和動(dòng)態(tài)加載,同時(shí)又要保證模塊間的通信港粱,正在完善的BeeHive就是奔著這個(gè)目標(biāo)去的螃成。
3.組件化實(shí)踐中的一些個(gè)人感悟
我們項(xiàng)目組件化方案是在去年11月底定的,最先在一個(gè)14年開發(fā)的老項(xiàng)目中實(shí)施的,采用的是上述的中型項(xiàng)目的架構(gòu)锈颗,實(shí)施過程中的工作量超乎了我們的預(yù)期顷霹,這個(gè)老項(xiàng)目本身的基礎(chǔ)層的維護(hù)做的不錯(cuò),我們把自己做的基礎(chǔ)組件做成私有pod來維護(hù)击吱,過程比較順利淋淀;再然后就是進(jìn)行模塊劃分,當(dāng)時(shí)按vc和service的最小粒度進(jìn)行了劃分覆醇,整理結(jié)束后發(fā)現(xiàn)有上百個(gè)之多朵纷,按依賴關(guān)系連起線來看的人頭皮發(fā)麻,如果按最小粒度劃分顯然不現(xiàn)實(shí)永脓,最后決定把關(guān)聯(lián)度很高的小模塊放到一起組成一個(gè)具體的模塊袍辞,這個(gè)模塊既提供vc也提供service,最后縮減成不到20個(gè)模塊常摧,這部分工作從頭到尾花了不少時(shí)間搅吁;等模塊劃分完,確認(rèn)好模塊負(fù)責(zé)人后落午,我們開始按照CTMediator的target-action方式讓每個(gè)負(fù)責(zé)人寫target和category谎懦,這個(gè)時(shí)候很多負(fù)責(zé)人因?yàn)閷?duì)這套體系的不了解出了很多問題,只有反復(fù)的去溝通交流溃斋,制定規(guī)范界拦,慢慢的大家熟悉了,問題就少了梗劫;同時(shí)由于一些接口傳參過多而采用字典傳參享甸,key為硬編碼的方式,經(jīng)常發(fā)生接口提供方改變key沒有及時(shí)通知到調(diào)用方而出錯(cuò)的問題梳侨,最后規(guī)定接口提供方的注釋一定到精確到每個(gè)key表達(dá)什么意思蛉威,有改動(dòng)立即通知調(diào)用方。最后整個(gè)組件化搞下來猫妙,導(dǎo)致提測(cè)時(shí)bug增加了不少瓷翻。但是等到后面我們對(duì)兩個(gè)新項(xiàng)目組件化的時(shí)候,因?yàn)榇蠹叶嘟M件化都又了一定的理解和認(rèn)識(shí)割坠,就很少因?yàn)榻M件化出現(xiàn)bug了齐帚。