1、模塊化設計的概述:編程
模塊化設計(Block-based design):對必定範圍內的不一樣功能或相同功能的不一樣性能、不一樣規格的產品進行功能分析的基礎上,劃分並設計出一系列功能模塊,經過模塊的選擇和組合構成不一樣的定製產品,以知足市場的不一樣需求。設計模式
模塊化設計是綠色設計方法之一,綠色設計是指「在產品整個生命週期內,着重考慮產品環境屬性(可拆卸性、可回收性、可維護性、可重複利用性等)並將其做爲設計目標,在知足環境目標要求的同時,保證產品應該有的功能、使用壽命、質量等要求」。ruby
綠色設計的原則被公認爲「3R」的原則,即Reduce,Reuse, Recycle, 減小環境污染、減少能源消耗,產品和零部件的回收再生循環或者從新利用。架構
2、 模塊化設計的特色:app
3、模塊的劃分:模塊化
模塊的劃分能夠從架構層面、業務層面或功能層面上進行劃分:工具
(一)架構層面:性能
每一個項目都會有總體的架構,這個架構就像地基同樣,只有搭好了架構才能在這個基礎上進行相應模塊功能的開發。項目架構在搭建的過程當中,從層級上來講,能夠按如下方式進行搭建(如下爲有名服務的架構):測試
項目目錄「UrMingService」,主要開發工做區域下,總體分爲「Classes」, 「Resources」/ 「Tools」和「Supporting Files」三個大的目錄:編碼
一、在「Classes」這個目錄下每一個模塊又按MVC的設計模式進行搭建,進行分門別類,方便管理,也增長了代碼層級的可讀性,咱們在「有名服務」的項目中分爲「首頁」、「消息」、「發佈」、「訂單」和「個人」五個大模塊,搭建架構時,在這幾大業務模塊的基礎上,增設一個「Public」模塊,這個模塊裏面主要是放置一些項目最上層級的基類或公共類,好比導航欄和底部標籤欄總體風格的設置等,也能夠用MVC的模式進行層級化管理。
二、「Resources」/ 「Tools」這個目錄下,主要是分門別類按功能進行封裝好的工具類和整個項目會用到的圖片資源,對於圖片資源放置的層級目錄能夠按大體分爲:引導頁、導航欄、標籤欄和展現類。
三、「Supporting Files」這個目錄下,主要用於放置整個項目會用到的本地文件,應用icon和啓動頁圖片管理的「Images.xcassets」,系統全局配置文件,國際化文件等。
(二)業務層面:
業務層面的模塊劃分跟產品設計的業務模塊劃分有關,能夠將不一樣業務劃分紅各個子模塊,這是相對總體又獨立的劃分,好比「有名服務」中咱們將業務模塊劃分爲「首頁」、「消息」、「發佈」、「訂單」和「個人」,每個相對獨立的業務模塊組裝在一塊兒,完成了「有名服務」所要展現的主題與業務。
業務模塊的統一與業務模塊之下的UI界面風格的統一有利於打造一系列同類風格的產品,這樣能夠在架構與功能模塊化的基礎上,將同類產品進行總體的模塊化,實行工廠化定製開發。
優勢:從業務層面上的劃分,會使得各個模塊更加獨立。
缺點:處理公共的事務將會變得繁瑣。
(三)功能層面:
功能層面的模塊劃分,是爲了功能獨立,實現高內聚,低耦合。每個小的功能模塊能運行,能調試,能測試,各個功能之間基本是徹底獨立的,不存在相互依賴的關係。
可是功能是與業務沒法分割的,咱們在開發時,須要宏觀的把控業務與功能之間的關係,對於類似的業務模塊,須要統一區別開發,協做完成,防止出現重複作工。
優勢:職責獨立清晰。
缺點:各司其責,缺乏連續性與宏觀性。
4、 常見問題及解決方案:
一、問題:相同功能,多處使用。
解決方案:將各個功能按職責剝離出來,各自開發各自的功能模塊。
能獨立運行,能編譯爲靜態庫,有完整的內部接口文檔。
符合:可拆卸行、可回收性、可維護性和可重複利用性。
二、問題:若是模塊拆分後,各個模塊常常會有第三方庫的依賴,好比公共庫等。如何避免重複引用及引用版本的問題。
解決方案:用CocoaPods軟件解決。
第三方的依賴所有由它自帶的podfile配置完成,它會根據項目中引用的第三方打包於項目中,若是遇到多個重複引用時,它將會合並引用。咱們的各個模塊也能夠作成獨立的podspecs文件,供其餘模塊引用,這樣就能夠實現模塊的升級與更新。
三、問題:功能模塊化後,每一個模塊的具體功能是怎樣的?
將應用程序中的功能分解爲獨立的模塊,這帶來了一個新的挑戰——咱們須要確保這些互不依賴的零件們可以在一塊兒工做。
一個模塊系統的另外一個特色是外部依賴的聲明。不少組件對外部條件有必定需求。使用依賴模式來維持模塊系統中組件之間的依賴性有一個大前提,那就是咱們必須遵循一系列的規則:
第一個規則是向後兼容性:若是新版本發佈,那麼全部在以前版本下可創建的契約也必須可以在新版本下工做。
第二個規則是,系統中的組件須要準確的說明它們須要什麼。當一個模塊的依賴性產生改變的時候,它必需要說出來,這樣系統纔可以準確的確認這些依賴性是否被知足。
5、模塊化設計綜述:
模塊最重要的屬性是它們應該儘量的獨立和自包含;模塊應被設計成能夠提供一整套功能,以便程序的其它部分與它清楚地相互做用;模塊提供的功能必須是完整的,以便它的調用者們能夠各取所需。
模塊化就是爲了減小循環依賴,減小耦合,提升設計和開發的效率。爲了作到這一點,咱們須要有一個設計規則,全部的模塊都在這個規則下進行設計。良好的設計規則,會把耦合密集的設計參數進行歸類做爲一個模塊,並以此劃分工做任務。而模塊之間彼此經過一個固定的接口(所謂的可見參數)進行交互,除此以外 的內部實現(所謂的隱參數)則由模塊的開發團隊進行自由發揮。
最後但也是重要的一點:方法命名的規範性很重要,註釋很重要,若是沒有註釋只有開發者心中很清楚,因此必要的註釋會給後期的代碼維護工做帶來便利的同時也提升效率。每一個界面的主要是用於作什麼的,能夠在頭文件中適當進行說明,如圖:
參考文獻:
http://doruby.com/projectmanage/2013/04/12/block-based-design/
http://developer.51cto.com/art/201001/179842_1.htm
http://book.51cto.com/art/201007/212898.htm
http://blog.csdn.net/newjerryj/article/details/7749901