組件化與模塊化之路

Nike說:Just Do IT(挨踢)—— 寫在模塊化試運行一周后依啰。

背景

早在去年聚磺,就有所耳聞公司將會實行事業(yè)部的劃分,如今按照公司業(yè)務(wù)的劃分霹粥,iOS開發(fā)的小伙伴大多都被分到對應(yīng)的業(yè)務(wù)事業(yè)部去了兼都,這感覺像是我們處于同一個假部門 旨涝,扯遠了~咳咳咳漂羊。為了更好的支撐公司業(yè)務(wù)的快速發(fā)展和產(chǎn)品迭代驾锰,我們采用了項目組件化的解決方案。從去年開始我們就為組件化之路做了不少前期準備走越,其中不僅僅只是將公用的類抽象成組件椭豫,還包括將業(yè)務(wù)代碼從項目中剝離出來,就先稱它為模塊化吧旨指,模塊化的好處在于可以支持各大業(yè)務(wù)線獨立發(fā)版赏酥,適合趕火車的開發(fā)模式,正是我們團隊現(xiàn)在所走的敏捷開發(fā)路線谆构。

項目組件化

要做模塊化的話裸扶,就要先從組件化開始,把組件進行抽象低淡,封裝做成獨立的Pod庫姓言,以便于維護版本和復(fù)用。等做完了組件化蔗蹋,就開始搞模塊化了何荚。

CocoaPods管理組件

def bigfan_private_pods
  #私有組件庫
  pod 'BFRefreshHeader', :git => '項目地址'
  pod 'BFHTTPManager', :git => '項目地址'
  pod 'LKGlobalNavigation', :git => '項目地址'
  pod 'BFPhotosPicker', :git => '項目地址'
  pod 'BFLocationManager', :git => '項目地址'
  pod 'BFNetworkActivityLogger', :git => '項目地址'
  pod 'BFPhotosBrowser', :git => '項目地址'
  pod 'BFActionSheet', :git => '項目地址'
  pod 'BFWebImageHelper', :git => '項目地址'
  pod 'BFPhotosPickerManager', :git => '項目地址'
  pod 'BFCustomHUD', :git => '項目地址'
  pod 'BFPlacePicker', :git => '項目地址'
  pod 'BFLogServiceManager', :git => '項目地址'
  pod 'BFNavigator', :git => '項目地址'
  pod 'BFEmptyDataSet', :git => '項目地址'
  pod 'BFQRCode', :git => '項目地址', :commit => '7c0636fecc8a43ea4415e2e996b145d3ec9f9ab4'
  pod 'NSObjectSafe', :git => '項目地址'
end

PS:commit可以指定分支上的某一次commit記錄。

業(yè)務(wù)模塊化

簡而言之猪杭,就是把業(yè)務(wù)代碼從主項目里剝離出來餐塘,用Pod做成一個單獨的庫來管理。模塊化的要求是:業(yè)務(wù)模塊代碼可以在殼工程加平臺模塊上獨立運行皂吮,當(dāng)然我們還要求殼工程在沒有導(dǎo)入任何業(yè)務(wù)模塊也能獨運行起來戒傻,所以業(yè)務(wù)解耦是多么得重要税手。剛才說到模塊化第一步是組件化,走完第一步后需纳,模塊化過程中我們遇到了不少問題芦倒,包括業(yè)務(wù)之間的解耦和數(shù)據(jù)共享,業(yè)務(wù)模塊之間的相互依賴和調(diào)用不翩。之后引入了DataCenter這個組件來解決業(yè)務(wù)之間的耦合和數(shù)據(jù)共享兵扬。以后有機會會詳細介紹一下DataCenter的原理。

CocoaPods管理模塊組件

def bigfan_pods
  bigfan_thirdparty_pods
  bigfan_local_pods
  bigfan_private_pods

  # s.dependencys for test
 # 平臺模塊組件 當(dāng)前使用的是遠程倉庫的Crust庫代碼
  pod 'Crust', :git => '項目地址', :branch => 'feature/3.0'

  #業(yè)務(wù)模塊組件
  pod 'Match', :git => '項目地址', :branch => 'feature/3.0'
  pod 'TalentC', :git => '項目地址', :branch => 'feature/3.0'
  pod 'Stadium', :git => '項目地址', :branch => 'feature/3.0'
  pod 'Club', :git => '項目地址', :branch => 'feature/3.0'
end

PS:branch可以指定某個分支上的代碼口蝠。

如何開發(fā)

只要將‘pod 'Crust', :git => '項目地址', :branch => 'feature/3.0'’修改成‘ pod 'Crust', :path => '/Users/maxwellpro/Crust'’后Pod install器钟,這樣就直接將平臺模塊指向我本地的Crust庫,等我開發(fā)完成就直接提交Crust庫的代碼妙蔗,不會影其他業(yè)務(wù)模塊的代碼傲霸。

  # s.dependencys for test
 # 平臺模塊組件 當(dāng)前使用的是本地倉庫的Crust庫代碼
  pod 'Crust', :path => '/Users/maxwellpro/Crust'

PS:假設(shè)我是平臺組的,我只能修改平臺(Crust)模塊的代碼眉反,不能修改Match昙啄、TalentC、Stadium禁漓、Club這四大業(yè)務(wù)模塊的代碼跟衅,即使我修改了,最終也是沒有權(quán)限提交的播歼。

DataCenter

業(yè)務(wù)模塊的數(shù)據(jù)源(DataSource)在App啟動時,就向DataCenter主動注冊業(yè)務(wù)模塊可以提供哪些服務(wù)掰读,當(dāng)業(yè)務(wù)模塊A需要獲取業(yè)務(wù)模塊B數(shù)據(jù)的時候秘狞,業(yè)務(wù)模塊A向DataCenter發(fā)起請求,DataCenter在服務(wù)列表中找到業(yè)務(wù)模塊B注冊的服務(wù)DataSourceB玻蝌,DataSourceB執(zhí)行事先寫好的服務(wù)赴精,數(shù)據(jù)返回給業(yè)務(wù)模塊A帽揪,就實現(xiàn)了業(yè)務(wù)之間的數(shù)據(jù)傳遞和方法調(diào)用。現(xiàn)在的DataCenter還不夠強大减响,暫時還不能實現(xiàn)共享View。

優(yōu)點

  • 獨立開發(fā)模式
  • 獨立業(yè)務(wù)
  • 獨立項目

業(yè)務(wù)線:

  • 使用平臺組提供的殼工程+平臺基礎(chǔ)服務(wù)進行開發(fā)郭怪。
  • 不能提交殼工程代碼支示。
  • 單個業(yè)務(wù)線可以在殼工程上獨立運行。
  • 不能直接依賴其他業(yè)務(wù)鄙才。

平臺組:

  • 不能提交業(yè)務(wù)代碼颂鸿。
  • 不能直接調(diào)用業(yè)務(wù)代碼。
  • 業(yè)務(wù)解耦和獨立運行攒庵。

異常流

  • Not Found ‘xx’ File - Pod install
  • Can't open Pods.xcodeproj - Pod install后重啟Xcode
  • Conflicts: BigFan/Pods/Pods.xcodeproj/project.pbxproj - Pod install
  • Pod install 報錯 - Pod repo update

存在的問題

目前在試運行的時候發(fā)現(xiàn)CocoaPods的緩存機制會導(dǎo)致代碼可能不是最新的嘴纺。

關(guān)于Pod 庫改成了本地路徑pod install 后還在 pods 文件來下面的解決方法败晴。

  • 原因:CocoaPods 緩存引起的

解決方法:

  • 1 先在Podfile 里面注掉該Pod庫
  • 2 Pod install
  • 3 然后在Podfile 里面打開該Pod庫
  • 4 Pod install
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市栽渴,隨后出現(xiàn)的幾起案子尖坤,更是在濱河造成了極大的恐慌,老刑警劉巖闲擦,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慢味,死亡現(xiàn)場離奇詭異,居然都是意外死亡佛致,警方通過查閱死者的電腦和手機贮缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俺榆,“玉大人感昼,你說我怎么就攤上這事」藜梗” “怎么了定嗓?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長萍桌。 經(jīng)常有香客問我宵溅,道長,這世上最難降的妖魔是什么上炎? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任恃逻,我火速辦了婚禮,結(jié)果婚禮上藕施,老公的妹妹穿的比我還像新娘寇损。我一直安慰自己,他們只是感情好裳食,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布矛市。 她就那樣靜靜地躺著,像睡著了一般诲祸。 火紅的嫁衣襯著肌膚如雪浊吏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天救氯,我揣著相機與錄音找田,去河邊找鬼。 笑死径密,一個胖子當(dāng)著我的面吹牛午阵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼底桂,長吁一口氣:“原來是場噩夢啊……” “哼植袍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起籽懦,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤于个,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后暮顺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厅篓,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年捶码,在試婚紗的時候發(fā)現(xiàn)自己被綠了羽氮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡惫恼,死狀恐怖档押,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祈纯,我是刑警寧澤令宿,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站腕窥,受9級特大地震影響粒没,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜簇爆,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一癞松、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧入蛆,春花似錦拦惋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽首尼。三九已至挑庶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間软能,已是汗流浹背迎捺。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留查排,地道東北人凳枝。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岖瑰。 傳聞我的和親對象是個殘疾皇子叛买,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 項目組件化、平臺化是技術(shù)公司的共同目標蹋订,越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件率挣,一方面使項目架構(gòu)...
    swu_luo閱讀 21,597評論 0 39
  • 最近在學(xué)習(xí)vue.js的時候發(fā)現(xiàn),vue的組件化的思想對于編寫代碼是一個非常有用的事情露戒。 首先為什么需要組件化椒功? ...
    拂曉的云閱讀 7,158評論 6 23
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,790評論 25 707
  • To:Xavi 01.25。你的生日智什。我的愛人哈維动漾。 我不知道該怎樣形容你我之間的感情,之前我說過是骨子里的深...
    Jerry無添加閱讀 265評論 0 1
  • 暑假到了現(xiàn)在,也剩下不到半個月的時間节沦。我們好好看看自己經(jīng)歷的兩個月键思,有人或許在唏噓不已,有人則會感到元氣滿滿甫贯。今天...
    Chosing_春幸閱讀 455評論 0 1