模塊化、組件化與插件化
組件化 modularization债鸡、component
模塊化 modularization
插件 plug-in;plug-in component铛纬;plug-in module
什么是組件化modularization厌均? 將一部分業(yè)務(wù)代碼從主工程獨(dú)立出去,單獨(dú)編譯運(yùn)行告唆,最后再合并測(cè)試并發(fā)布的方案得到廣泛運(yùn)用棺弊。這就是組件化
1.實(shí)際項(xiàng)目中的組件化問題
- 解決人多(更好的協(xié)作)、需求多(更好的功能模塊劃分)的問題擒悬;
- 解決項(xiàng)目模塊間的代碼耦合問題模她;(堅(jiān)決抵制業(yè)務(wù)組件間代碼直接引用)
產(chǎn)品業(yè)務(wù)組件:(例如圈子、1元購懂牧、登錄侈净、客服MM等)
- 業(yè)務(wù)功能間相對(duì)獨(dú)立,相互間沒有Model共享的依賴;
- 業(yè)務(wù)之間的頁面調(diào)用只能通過UIBus進(jìn)行跳轉(zhuǎn)畜侦;
- 業(yè)務(wù)之間的邏輯Action調(diào)用只能通過服務(wù)提供元扔;
在組件化 / 模塊化之前,蜂鳥商家版 App 的所有代碼 / 資源文件等都是在同一個(gè)主工程里的夏伊,只有 RN 倉庫或組內(nèi)公用私有庫等極少部分代碼游離于主工程之外摇展,所以在開發(fā)時(shí),每一次都要編譯整個(gè)項(xiàng)目的所有代碼溺忧,十分低效咏连。這個(gè)問題在獨(dú)立開發(fā)時(shí)還不是十分明顯,畢竟雖然項(xiàng)目大但是代碼只有一個(gè)人在提交鲁森,所以項(xiàng)目代碼量增加也不是那么夸張而且對(duì)項(xiàng)目發(fā)生的變化比較熟悉祟滴。但是當(dāng)多人協(xié)作開發(fā)時(shí),這個(gè)缺陷就暴露了出來歌溉,大家在各自開發(fā)不同的業(yè)務(wù)時(shí)垄懂,不僅要時(shí)刻和他人同步項(xiàng)目變化、讀懂他人代碼痛垛,還要每次編譯完整個(gè)項(xiàng)目才能對(duì)自己所做的一點(diǎn)修改進(jìn)行調(diào)試草慧,效率低下。
- 項(xiàng)目臃腫不堪
- 團(tuán)隊(duì)規(guī)模變化
- 業(yè)務(wù)發(fā)展壓力
- 代碼管理混亂
目標(biāo)
- 加快編譯速度匙头,不用再編譯組件 / 模塊外沒有被依賴到的代碼漫谷;
- 便于將每個(gè)模塊指定給不同負(fù)責(zé)人進(jìn)行管理;
- 降低合并難度蹂析,減小沖突和出錯(cuò)概率舔示,提高業(yè)務(wù)開發(fā)效率;
- 將 Swift 和 OC 代碼進(jìn)行分離电抚,便于進(jìn)一步 Swift 化工作的推進(jìn)惕稻;
- 可為模塊編寫單元測(cè)試,提高工作效率蝙叛,同時(shí)方便測(cè)試人員進(jìn)行有針對(duì)性的測(cè)試俺祠。
目標(biāo)設(shè)定
- 功能組件獨(dú)立:保證所有的底層功能組件從主工程抽出,獨(dú)立與主工程之外借帘,便于復(fù)用锻煌、業(yè)務(wù)模塊的調(diào)用;
- 業(yè)務(wù)模塊劃分與拆解:將業(yè)務(wù)按對(duì)應(yīng)用途進(jìn)行劃分和拆解姻蚓,想辦法切斷各業(yè)務(wù)之間的強(qiáng)依賴宋梧;
- 所有組件 / 模塊獨(dú)立編譯:所有功能組件和業(yè)務(wù)模塊能夠獨(dú)立于主工程進(jìn)行編譯,有各自的 Demo 工程狰挡;
- CocoaPods 發(fā)布:在內(nèi)網(wǎng) GitLab 進(jìn)行發(fā)布捂龄,并且之后對(duì)每個(gè)模塊用 GitFlow 工作流進(jìn)行管理和后續(xù)發(fā)布工作释涛。
三. 計(jì)劃制定
組件,就是我們對(duì)功能的封裝倦沧,一個(gè)功能就是一個(gè)組件唇撬,數(shù)據(jù)庫、網(wǎng)絡(luò)展融、文件操作窖认、社會(huì)化分享等等這些功能都是組件。我們之所以要搞出組件的概念告希,是為了能夠讓我們的上層業(yè)務(wù)模塊能夠隨時(shí)依賴和調(diào)用這些基礎(chǔ)功能扑浸。組件基本上可以分為基礎(chǔ)功能組件、通用 UI 組件燕偶、基礎(chǔ)業(yè)務(wù)組件等這幾類喝噪。所以為了滿足上述要求,組件必須具有較高的獨(dú)立性指么、擴(kuò)展性以及復(fù)用性酝惧。
模塊,就是對(duì)一系列有內(nèi)聚性的業(yè)務(wù)進(jìn)行整理伯诬,將其與其它業(yè)務(wù)進(jìn)行切割晚唇、拆分,從主工程或原所在位置抽離為一個(gè)相對(duì)獨(dú)立的部分盗似。僅僅針對(duì)業(yè)務(wù)而言缺亮,比如說我們可以把訂單業(yè)務(wù)獨(dú)立為為一個(gè)模塊,可以把個(gè)人中心獨(dú)立為一個(gè)模塊桥言,把用戶登錄獨(dú)立為一個(gè)模塊等,在 App 中的體現(xiàn)就是一個(gè)個(gè)獨(dú)立的 Git 倉庫葵礼。模塊化的一個(gè)好處是用到時(shí)可以搭積木号阿,比如可以多個(gè)工程間復(fù)用同一個(gè)或幾個(gè)業(yè)務(wù)模塊,比如騰訊的 QQ 和 TIM鸳粉,除了 UI 界面外 TIM 顯然復(fù)用了大量現(xiàn)有的原 QQ 工程的業(yè)務(wù)模塊代碼扔涧,當(dāng)然,我們這里暫時(shí)并沒有這個(gè)需求届谈。
看了這篇文章會(huì)給很多啟發(fā),明白了很多東西
http://www.cocoachina.com/articles/21967
模塊與組件
在一個(gè)項(xiàng)目中
個(gè)人理解
組件可以組成一個(gè)模塊
模塊之間進(jìn)行相互跳轉(zhuǎn)
模塊化開發(fā):按照項(xiàng)目業(yè)務(wù)模塊來劃分枯夜,將一個(gè)app按業(yè)務(wù)拆分為登
錄模塊、聊天模塊等等艰山,模塊化其中一個(gè)核心的目的就是代碼的高可
復(fù)用湖雹、高可維護(hù)和高可擴(kuò)展性能。
組件化開發(fā):對(duì)應(yīng)用功能的封裝曙搬,一個(gè)功能一個(gè)組件摔吏。比如網(wǎng)絡(luò)連接
交互組件鸽嫂、即時(shí)通訊IM組件、數(shù)據(jù)庫組件等征讲。是對(duì)模塊化更小的細(xì)
分据某。
最后總結(jié)一下
我認(rèn)為 組件化 還是模塊化
因?yàn)轫?xiàng)目開發(fā)的人數(shù)比較多,功能大多比較雜
因此基礎(chǔ)的東西 或者 模塊做成pod當(dāng)時(shí)引入 最為簡(jiǎn)單
但是要做成什么樣的 幾個(gè)模塊如何互調(diào)?是做成pod引入么? 下次再看看