這篇文章主要談一下自己對模塊化和組件化的理解。
模塊化和組件化差別
很多時候模塊化、組件化會被大家認為是一個東西。其實我覺得他們是有很大差異的。
組件:按我理解是比較小的功能塊,他的拆分粒度相對模塊來說要細很多。
模塊:按我理解是比較大的功能塊,他的拆分粒度相對組件來說要大的多,尤其是一個工程非常龐大的時候,很多公司會拆分成各個業(yè)務線,每個業(yè)務線負責自己的模塊,最后把這些模塊集成到一個主工程中。
所以,我認為一個好的工程結構應該合理的對其進行模塊化,對于每個模塊合理的進行組件化。組件與組件間的交互通過面向對象就能很優(yōu)雅的處理好,那么模塊與模塊間又如何優(yōu)雅的進行交互呢?
模塊如何交互
模塊與模塊交互這個話題,網(wǎng)上討論最多的兩種方案:(注意,網(wǎng)上說的組件其實是我理解的模塊的意思,所以我用模塊來描述,這個是個人的小潔癖,細節(jié)決定成敗)
- 通過注冊url的方式實現(xiàn)模塊間交互,蘑菇街Limboy的模塊化方案
- 利用OC runtime的特性,實現(xiàn)模塊間交互,CASA的方案
關于這兩種方案的利弊有很多說法,仁者見仁智者見智,總之這兩種方案都是能抓到老鼠的好貓,如果你對模塊化還沒有一定的概念,大腦中沒有任何相關的構思,建議先去看看他們的文章,我這篇文章不會介紹具體的知識點,只記錄一下自己的理解。
關于這兩種方案的總結,我推薦一篇文章給大家,介紹的非常到位,思路清晰,bang神對兩種方案的總結與理解,值得看一看
那么針對這兩種方案,我個人是偏向CASA的方案的,原因和bang神的看法也大體一致。其實CASA的方案也很簡單,就是利用了OC特性,通過runtime,動態(tài)的從一個模塊往另外一個模塊調用,而不是import的方式去調用。為了避免每一個調用的地方都重復的寫這種動態(tài)的調用代碼,CASA對這種重復性代碼進行了優(yōu)化,只要大家遵循一定的規(guī)則,那么這種重復性的代碼就可以抽取出來了,target-action方案也由此誕生。
CASA的方案CTMediator源碼和demo也很簡單,建議大家看一看。demo很好的演示了調用流程。
不過個人認為demo中沒有很好的展示出mediator中間件由誰來負責開發(fā)和維護,于是我建了一個例子,做簡要說明,仔細關注一下一下圖的文字闡述。

最后雙手附上demo