iOS應(yīng)用模塊化的思考及落地方案(一)模塊的劃分及模塊化工作流程

1.0 什么是模塊化

很多關(guān)于重構(gòu)設(shè)計模式的介紹中非凌,經(jīng)常提到的幾個詞語是復(fù)用解耦

模塊化之所以被提出,也更多是為了解決這幾個問題梅鹦。

復(fù)用可以減少重復(fù)造輪子的情況,很容易理解的是冗锁,我們經(jīng)常使用的github上的第三方框架齐唆,比如,AFNetworking等冻河,有了這些組件箍邮,我們就不需要再寫一遍了茉帅。

解耦可以減少類或文件之間的關(guān)聯(lián),如果一個類引用了其他10個類锭弊,那么當(dāng)我們看到這個類或修改這個類的時候堪澎,我們同時需要關(guān)注另外10個類,了解它們與本類的關(guān)聯(lián)情況味滞。如果你的類樱蛤,沒有與其他任何類關(guān)聯(lián),你在閱讀代碼的時候剑鞍,完全可以忘記其他代碼的存在昨凡,只看這一個文件就夠了。

我們可以看出蚁署,低耦合的系統(tǒng)便脊,能夠?qū)o數(shù)簡單的模塊,組成復(fù)雜的工程光戈。復(fù)用很明顯能夠提升工作效率就轧,解放生產(chǎn)力。

這樣一來田度,你的系統(tǒng)是簡單的,清晰的解愤,當(dāng)你重構(gòu)或修改系統(tǒng)的時候镇饺,可以不必有任何顧慮。

而實(shí)現(xiàn)低耦合可復(fù)用的手段送讲,往往就稱為模塊化奸笤。

在實(shí)際開發(fā)中,模塊往往被定義為能夠獨(dú)立實(shí)現(xiàn)單一任務(wù)的代碼單元哼鬓。

從代碼角度講监右,一個功能,一個文件异希,一個類健盒,甚至一個函數(shù),都可以成為一個模塊称簿。

除了上述優(yōu)點(diǎn)之外扣癣,模塊化之后,每個模塊可以單獨(dú)開發(fā)憨降,單獨(dú)測試父虑,也更容易做內(nèi)部代碼的權(quán)限管理。

上面已經(jīng)說過授药,整個系統(tǒng)都是由不同的模塊構(gòu)成士嚎。那么問題的難點(diǎn)就在于呜魄,如何定義模塊的邊界。

2.0 模塊的劃分及通信

在客戶端實(shí)際開發(fā)中莱衩,根據(jù)模塊的使用方式爵嗅,可以大致分為2種。

第一種膳殷,提供非巢俾猓基礎(chǔ)功能,會頻繁地被其他模塊引用赚窃,其他模塊可以直接引入這些模塊的api進(jìn)行調(diào)用册招。比如:網(wǎng)絡(luò)模塊,常用工具類勒极,布局是掰,圖片,其他依賴的第三方框架辱匿。

第二種键痛,提供有價值的產(chǎn)品功能,更多的是頁面的展示接口匾七,它從來不被別的模塊直接引用絮短,更多地通過異步的方式來進(jìn)行通信(使用路由)。比如:會員模塊昨忆,付費(fèi)模塊丁频,短視頻模塊等等。

另外邑贴,除了這兩種模塊之外席里,還有一種模塊既會被其他模塊頻繁地引用,也會提供頁面的展示接口拢驾。比如:登陸奖磁,收藏,關(guān)注等功能繁疤。這種模塊需要為其他模塊提供數(shù)據(jù)及修改接口咖为,有時候還需要展示UI。

其實(shí)對于第三種模塊來說稠腊,可以根據(jù)數(shù)據(jù)和展示案疲,拆分為2個模塊:一個模塊用于對外部提供數(shù)據(jù),可以被其他模塊直接引用麻养;另一個模塊用于通過異步的方式進(jìn)行頁面的展示褐啡。

3.0 iOS模塊化的實(shí)踐方案

3.1 模塊化工作流程

iOS中的模塊化,不同的模塊是通過動態(tài)庫/靜態(tài)庫的方式引入到主工程中的鳖昌。

動態(tài)庫和靜態(tài)庫的區(qū)別無需多說备畦,可根據(jù)需要自行選擇低飒。

cocoapods是一個非常優(yōu)秀的模塊管理工具。

我們使用cocoapods來管理不同的模塊時懂盐,代碼可以以3種存在形式出現(xiàn)褥赊,分別是:源碼,靜態(tài)庫莉恼,動態(tài)庫拌喉。

所以在模塊化之前,我們需要提前進(jìn)行的工作有:

  • 安裝cocoapods
  • 建立pod私有庫俐银,用來存儲我們所有模塊的podspec文件

我們創(chuàng)建一個新模塊工作流應(yīng)該是這樣的:

  • 建立一個新工程尿背,修改必要設(shè)置
  • 建立Podfile文件,添加依賴捶惜,然后執(zhí)行pod install安裝依賴
  • 開始開發(fā)工作田藐,開發(fā)過程中,你可能需要建立一個Demo工程或者Demo target用于在開發(fā)過程中吱七,測試你的靜態(tài)庫api
  • 編寫單元測試
  • 測試通過后汽久,你需要將代碼提交到git中,并且打一個tag
  • 編寫podspec文件
  • 檢查podspec文件的正確性
  • 使用pod repo push命令將podspec文件推到pod私有庫中
  • 如果其他模塊想要引用這個模塊踊餐,按照pod標(biāo)準(zhǔn)使用方式安裝依賴即可

3.2 可能遇到的問題

在上述流程中景醇,可能遇到的問題有:

  1. podspec文件怎么寫?
  2. podspec文件提交和更新需要怎么做吝岭?
  3. Podfile文件怎么寫三痰?
  4. 如果我開發(fā)的模塊依賴了我們之前開發(fā)的其他的模塊該怎么處理?如果我依賴的模塊也需要修改苍碟,應(yīng)該怎樣處理?
  5. 產(chǎn)生循環(huán)依賴怎么辦撮执?A依賴B微峰,B又依賴A。
  6. 怎樣處理圖片等資源文件
  7. 如何進(jìn)行OC與swift的混編
  8. framework如何編譯抒钱,如何減肥蜓肆,如何合并

4.0 流程自動化

我們可以看到,創(chuàng)建模塊化的過程流程比較多谋币,涉及的技術(shù)也很多:cocoapods仗扬,Xcode設(shè)置,資源管理蕾额,Swift&OC編譯管理早芭,靜態(tài)庫接入方式等等。

其中很多技術(shù)內(nèi)容其實(shí)并不常用诅蝶,在開發(fā)過程中退个,我們遇到問題后募壕,即時查閱文檔解決,過了一段時間语盈,遇到同樣的問題可能還需要再查閱舱馅。

而且,不同的人在實(shí)踐過程中刀荒,可能會遇到相同的問題代嗤,每個人都需要解決一次。

流程過多缠借,還容易因?yàn)檎`操作而產(chǎn)生錯誤干毅,這種問題很難解決,往往遇到就會花費(fèi)大量時間處理烈炭。

我們再回頭看一下工作流程溶锭,其實(shí)很多工作都是固定不變的,每次創(chuàng)建新模塊都是重復(fù)同樣的過程符隙,因此這部分流程我們可以通過自動化腳本自動完成趴捅。

我們哪些工作可以使用腳本完成呢?

  1. 創(chuàng)建模塊工程Demo工程霹疫,自動設(shè)置里面的Build Setting選項(xiàng)拱绑,并使用.xcworkspace來管理
  2. 部分內(nèi)容根據(jù)用戶輸入,自動創(chuàng)建podspec文件丽蝎,并檢查其正確性
  3. 根據(jù)用戶輸入的依賴模塊猎拨,自動創(chuàng)建不同工程的Podfile文件,并使用pod install安裝依賴
  4. 管理模塊目錄結(jié)構(gòu)屠阻,腳本能夠方便的對模塊進(jìn)行增刪改查
  5. 如果某個模塊依賴的是我們自己開發(fā)的其他模塊红省,那么被依賴的模塊會以local path的方式引入到工程中,這樣我們可以在當(dāng)前模塊的工程中直接修改依賴模塊的代碼并進(jìn)行測試国觉,不需要打開多個工程吧恃。開發(fā)完成后,分別進(jìn)行提交麻诀。
  6. 自動安裝腳本所依賴的軟件和環(huán)境
  7. 記錄已經(jīng)push到私有庫的模塊痕寓,方便處理多依賴模塊的開發(fā)
  8. 開發(fā)完成后,使用腳本一鍵推送到pod庫中
  9. 對已經(jīng)在pod庫中的模塊進(jìn)行二次開發(fā)時蝇闭,可以一鍵拉取工程并安裝所有依賴

完成上面的功能后呻率,我們可以發(fā)現(xiàn):

  1. 對于全新的模塊,我們可以使用腳本呻引,一鍵創(chuàng)建工程礼仗,然后就可以進(jìn)行業(yè)務(wù)開發(fā)了,開發(fā)之后,只需要再執(zhí)行一個腳本藐守,就能夠推送到私有庫中挪丢,不需要了解cocoapods和Xcode設(shè)置的任何細(xì)節(jié)。
  2. 對于二次開發(fā)的模塊卢厂,我們同樣適用腳本乾蓬,一鍵拉取工程及所有依賴,僅僅關(guān)注業(yè)務(wù)開發(fā)即可慎恒。開發(fā)完成后任内,同樣使用腳本一鍵推送到私有庫中。

--完--

  1. iOS應(yīng)用模塊化的思考及落地方案(一)模塊的劃分及模塊化工作流程
  2. iOS應(yīng)用模塊化的思考及落地方案(二)模塊化自動構(gòu)建工具的使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末融柬,一起剝皮案震驚了整個濱河市死嗦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粒氧,老刑警劉巖越除,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異外盯,居然都是意外死亡摘盆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門饱苟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孩擂,“玉大人,你說我怎么就攤上這事箱熬±嗫眩” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵城须,是天一觀的道長蚤认。 經(jīng)常有香客問我,道長糕伐,這世上最難降的妖魔是什么砰琢? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赤炒,結(jié)果婚禮上氯析,老公的妹妹穿的比我還像新娘亏较。我一直安慰自己莺褒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布雪情。 她就那樣靜靜地躺著遵岩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尘执,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天舍哄,我揣著相機(jī)與錄音,去河邊找鬼誊锭。 笑死表悬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丧靡。 我是一名探鬼主播蟆沫,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼温治!你這毒婦竟也來了饭庞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤熬荆,失蹤者是張志新(化名)和其女友劉穎舟山,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卤恳,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡累盗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纬黎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幅骄。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖本今,靈堂內(nèi)的尸體忽然破棺而出拆座,到底是詐尸還是另有隱情,我是刑警寧澤冠息,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布挪凑,位于F島的核電站,受9級特大地震影響逛艰,放射性物質(zhì)發(fā)生泄漏躏碳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一散怖、第九天 我趴在偏房一處隱蔽的房頂上張望菇绵。 院中可真熱鬧,春花似錦镇眷、人聲如沸咬最。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽永乌。三九已至惑申,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翅雏,已是汗流浹背圈驼。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留望几,地道東北人绩脆。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像橄抹,于是被迫代替她去往敵國和親衙伶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

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