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

1.0 什麼是模塊化

不少關於重構設計模式的介紹中,常常提到的幾個詞語是複用解耦git

模塊化之因此被提出,也更可能是爲了解決這幾個問題。github

複用能夠減小重複造輪子的狀況,很容易理解的是,咱們常用的github上的第三方框架,好比,AFNetworking等,有了這些組件,咱們就不須要再寫一遍了。swift

解耦能夠減小類或文件之間的關聯,若是一個類引用了其餘10個類,那麼當咱們看到這個類或修改這個類的時候,咱們同時須要關注另外10個類,瞭解它們與本類的關聯狀況。若是你的類,沒有與其餘任何類關聯,你在閱讀代碼的時候,徹底能夠忘記其餘代碼的存在,只看這一個文件就夠了。設計模式

咱們能夠看出,低耦合的系統,可以將無數簡單的模塊,組成複雜的工程。複用很明顯可以提高工做效率,解放生產力。api

這樣一來,你的系統是簡單的,清晰的,當你重構或修改系統的時候,能夠沒必要有任何顧慮。網絡

而實現低耦合可複用的手段,每每就稱爲模塊化。框架

在實際開發中,模塊每每被定義爲可以獨立實現單一任務的代碼單元。異步

從代碼角度講,一個功能,一個文件,一個類,甚至一個函數,均可以成爲一個模塊。模塊化

除了上述優勢以外,模塊化以後,每一個模塊能夠單獨開發,單獨測試,也更容易作內部代碼的權限管理。函數

上面已經說過,整個系統都是由不一樣的模塊構成。那麼問題的難點就在於,如何定義模塊的邊界。

2.0 模塊的劃分及通訊

在客戶端實際開發中,根據模塊的使用方式,能夠大體分爲2種。

第一種,提供很是基礎功能,會頻繁地被其餘模塊引用,其餘模塊能夠直接引入這些模塊的api進行調用。好比:網絡模塊,經常使用工具類,佈局,圖片,其餘依賴的第三方框架。

第二種,提供有價值的產品功能,更多的是頁面的展現接口,它歷來不被別的模塊直接引用,更多地經過異步的方式來進行通訊(使用路由)。好比:會員模塊,付費模塊,短視頻模塊等等。

另外,除了這兩種模塊以外,還有一種模塊既會被其餘模塊頻繁地引用,也會提供頁面的展現接口。好比:登錄,收藏,關注等功能。這種模塊須要爲其餘模塊提供數據及修改接口,有時候還須要展現UI。

其實對於第三種模塊來講,能夠根據數據和展現,拆分爲2個模塊:一個模塊用於對外部提供數據,能夠被其餘模塊直接引用;另外一個模塊用於經過異步的方式進行頁面的展現。

3.0 iOS模塊化的實踐方案

3.1 模塊化工做流程

iOS中的模塊化,不一樣的模塊是經過動態庫/靜態庫的方式引入到主工程中的。

動態庫和靜態庫的區別無需多說,可根據須要自行選擇。

cocoapods是一個很是優秀的模塊管理工具。

咱們使用cocoapods來管理不一樣的模塊時,代碼能夠以3種存在形式出現,分別是:源碼,靜態庫,動態庫。

因此在模塊化以前,咱們須要提早進行的工做有:

  • 安裝cocoapods
  • 創建pod私有庫,用來存儲咱們全部模塊的podspec文件

咱們建立一個新模塊工做流應該是這樣的:

  • 創建一個新工程,修改必要設置
  • 創建Podfile文件,添加依賴,而後執行pod install安裝依賴
  • 開始開發工做,開發過程當中,你可能須要創建一個Demo工程或者Demo target用於在開發過程當中,測試你的靜態庫api
  • 編寫單元測試
  • 測試經過後,你須要將代碼提交到git中,而且打一個tag
  • 編寫podspec文件
  • 檢查podspec文件的正確性
  • 使用pod repo push命令將podspec文件推到pod私有庫中
  • 若是其餘模塊想要引用這個模塊,按照pod標準使用方式安裝依賴便可

3.2 可能遇到的問題

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

  1. podspec文件怎麼寫?
  2. podspec文件提交和更新須要怎麼作?
  3. Podfile文件怎麼寫?
  4. 若是我開發的模塊依賴了咱們以前開發的其餘的模塊該怎麼處理?若是我依賴的模塊也須要修改,應該怎樣處理?
  5. 產生循環依賴怎麼辦?A依賴B,B又依賴A。
  6. 怎樣處理圖片等資源文件
  7. 如何進行OC與swift的混編
  8. framework如何編譯,如何減肥,如何合併

4.0 流程自動化

咱們能夠看到,建立模塊化的過程流程比較多,涉及的技術也不少:cocoapods,Xcode設置,資源管理,Swift&OC編譯管理,靜態庫接入方式等等。

其中不少技術內容其實並不經常使用,在開發過程當中,咱們遇到問題後,即時查閱文檔解決,過了一段時間,遇到一樣的問題可能還須要再查閱。

並且,不一樣的人在實踐過程當中,可能會遇到相同的問題,每一個人都須要解決一次。

流程過多,還容易由於誤操做而產生錯誤,這種問題很難解決,每每遇到就會花費大量時間處理。

咱們再回頭看一下工做流程,其實不少工做都是固定不變的,每次建立新模塊都是重複一樣的過程,所以這部分流程咱們能夠經過自動化腳本自動完成。

咱們哪些工做可使用腳本完成呢?

  1. 建立模塊工程Demo工程,自動設置裏面的Build Setting選項,並使用.xcworkspace來管理
  2. 部份內容根據用戶輸入,自動建立podspec文件,並檢查其正確性
  3. 根據用戶輸入的依賴模塊,自動建立不一樣工程的Podfile文件,並使用pod install安裝依賴
  4. 管理模塊目錄結構,腳本可以方便的對模塊進行增刪改查
  5. 若是某個模塊依賴的是咱們本身開發的其餘模塊,那麼被依賴的模塊會以local path的方式引入到工程中,這樣咱們能夠在當前模塊的工程中直接修改依賴模塊的代碼並進行測試,不須要打開多個工程。開發完成後,分別進行提交。
  6. 自動安裝腳本所依賴的軟件和環境
  7. 記錄已經push到私有庫的模塊,方便處理多依賴模塊的開發
  8. 開發完成後,使用腳本一鍵推送到pod庫中
  9. 對已經在pod庫中的模塊進行二次開發時,能夠一鍵拉取工程並安裝全部依賴

完成上面的功能後,咱們能夠發現:

  1. 對於全新的模塊,咱們可使用腳本,一鍵建立工程,而後就能夠進行業務開發了,開發以後,只須要再執行一個腳本,就可以推送到私有庫中,不須要了解cocoapods和Xcode設置的任何細節。
  2. 對於二次開發的模塊,咱們一樣適用腳本,一鍵拉取工程及全部依賴,僅僅關注業務開發便可。開發完成後,一樣使用腳本一鍵推送到私有庫中。

--完--

  1. iOS應用模塊化的思考及落地方案(一)模塊的劃分及模塊化工做流程
  2. iOS應用模塊化的思考及落地方案(二)模塊化自動構建工具的使用
相關文章
相關標籤/搜索