目標-動作模式
Target-Action【哎可深---活動】 —— CTMediator【沒底A特---傳遞者】
通過給組件包裝一層wrapper來給外界提供服務,然后調用者通過依賴中間件來使用服務;其中,中間件是通過runtime來調用組件的服務,是真正意義上的解耦,也是該方案最核心的地方。具體實施過程是給組件封裝一層target對象來對外提供服務,不會對原來組件造成入侵;然后,通過實現中間件的category來提供服務給調用者,這樣使用者只需要依賴中間件,而組件則不需要依賴中間件。
http://www.lxweimin.com/p/76132c91be47參考文獻
VC之間的解耦
如果HomeViewController里有 N 個這樣的 button 事件,每個點擊后的跳轉都是不同的頁面,那么則HomeViewController里,需要導入 N 個這樣的OneViewController.h;
如果HomeViewController是一個可以移植到其它項目的業務模塊,在拖出首頁HomeVC相關的業務代碼時,難道還要把 'HomeViewController.m' 導入的 N 個其它XxxViewController.h都一塊拖到新項目中么?
這點就是因為代碼的耦合導致了首頁HomeVC沒法方便的移植。
說這樣沒有問題,是因為普通情況下,我們并沒有移植HomeVC到其它項目的需求。
至于什么時候會有這樣的問題,以及,這樣的問題如果解決,在iOS組件化方案調研這篇中,已經做過簡單的討論,這篇主要是選取了我個人較偏向的Target-Action這套方案,簡單講一下實現方式。
解耦方法
創建一個?Target_News?類,在這個文件里,我們主要生成 NewsViewController 實例并為其進行一些必要的賦值。例如:
2.創建 CTMediator 的Category.
CTMediator+NewsActions.這個Category利用Runtime調用我們剛剛生成的Target_News。
由于利用了Runtime,導致我們完全不用#import剛剛生成的Target_News即可執行里面的方法,所以這一步,兩個類是完全解耦的。也即是說,我們在完全解耦的情況下獲取到了我們需要的NewsViewController。例如:
3.最終使用
由于在Target中,傳遞值得方式采用了去Model化得方式,導致我們在整個過程中也沒有#import任何Model。所以,我們的每個類都與Model解耦。