不少關於重構
及設計模式
的介紹中,常常提到的幾個詞語是複用
及解耦
。git
模塊化之因此被提出,也更可能是爲了解決這幾個問題。github
複用
能夠減小重複造輪子的狀況,很容易理解的是,咱們常用的github上的第三方框架,好比,AFNetworking等,有了這些組件,咱們就不須要再寫一遍了。swift
解耦
能夠減小類或文件之間的關聯,若是一個類引用了其餘10個類,那麼當咱們看到這個類或修改這個類的時候,咱們同時須要關注另外10個類,瞭解它們與本類的關聯狀況。若是你的類,沒有與其餘任何類關聯,你在閱讀代碼的時候,徹底能夠忘記其餘代碼的存在,只看這一個文件就夠了。設計模式
咱們能夠看出,低耦合
的系統,可以將無數簡單的模塊,組成複雜的工程。複用
很明顯可以提高工做效率,解放生產力。api
這樣一來,你的系統是簡單的,清晰的,當你重構或修改系統的時候,能夠沒必要有任何顧慮。網絡
而實現低耦合
和可複用
的手段,每每就稱爲模塊化。框架
在實際開發中,模塊每每被定義爲可以獨立實現單一任務的代碼單元。異步
從代碼角度講,一個功能,一個文件,一個類,甚至一個函數,均可以成爲一個模塊。模塊化
除了上述優勢以外,模塊化以後,每一個模塊能夠單獨開發,單獨測試,也更容易作內部代碼的權限管理。函數
上面已經說過,整個系統都是由不一樣的模塊構成。那麼問題的難點就在於,如何定義模塊的邊界。
在客戶端實際開發中,根據模塊的使用方式,能夠大體分爲2種。
第一種,提供很是基礎功能,會頻繁地被其餘模塊引用,其餘模塊能夠直接引入這些模塊的api進行調用。好比:網絡模塊,經常使用工具類,佈局,圖片,其餘依賴的第三方框架。
第二種,提供有價值的產品功能,更多的是頁面的展現接口,它歷來不被別的模塊直接引用,更多地經過異步的方式來進行通訊(使用路由)。好比:會員模塊,付費模塊,短視頻模塊等等。
另外,除了這兩種模塊以外,還有一種模塊既會被其餘模塊頻繁地引用,也會提供頁面的展現接口。好比:登錄,收藏,關注等功能。這種模塊須要爲其餘模塊提供數據及修改接口,有時候還須要展現UI。
其實對於第三種模塊來講,能夠根據數據和展現,拆分爲2個模塊:一個模塊用於對外部提供數據,能夠被其餘模塊直接引用;另外一個模塊用於經過異步的方式進行頁面的展現。
iOS中的模塊化,不一樣的模塊是經過動態庫/靜態庫的方式引入到主工程中的。
動態庫和靜態庫的區別無需多說,可根據須要自行選擇。
cocoapods是一個很是優秀的模塊管理工具。
咱們使用cocoapods來管理不一樣的模塊時,代碼能夠以3種存在形式出現,分別是:源碼,靜態庫,動態庫。
因此在模塊化以前,咱們須要提早進行的工做有:
咱們建立一個新模塊工做流應該是這樣的:
在上述流程中,可能遇到的問題有:
咱們能夠看到,建立模塊化的過程流程比較多,涉及的技術也不少:cocoapods,Xcode設置,資源管理,Swift&OC編譯管理,靜態庫接入方式等等。
其中不少技術內容其實並不經常使用,在開發過程當中,咱們遇到問題後,即時查閱文檔解決,過了一段時間,遇到一樣的問題可能還須要再查閱。
並且,不一樣的人在實踐過程當中,可能會遇到相同的問題,每一個人都須要解決一次。
流程過多,還容易由於誤操做而產生錯誤,這種問題很難解決,每每遇到就會花費大量時間處理。
咱們再回頭看一下工做流程,其實不少工做都是固定不變的,每次建立新模塊都是重複一樣的過程,所以這部分流程咱們能夠經過自動化腳本自動完成。
咱們哪些工做可使用腳本完成呢?
模塊工程
及Demo
工程,自動設置裏面的Build Setting
選項,並使用.xcworkspace來管理podspec
文件,並檢查其正確性Podfile
文件,並使用pod install
安裝依賴local path
的方式引入到工程中,這樣咱們能夠在當前模塊的工程中直接修改依賴模塊的代碼並進行測試,不須要打開多個工程。開發完成後,分別進行提交。完成上面的功能後,咱們能夠發現:
--完--