例如:聊天頁面,輸入框view產生的「hello」文本,直接經過context傳遞到BusinessObject進行處理,生成的新消息message經過DataHandler插入到message array以後,直接通知到message tableview進行刷新。方法調用的路徑變短了,意味着調試的時候step over的次數減小了。git
經過model+protocol進行耦合。耦合的雙方須要引用相同的model和protocol文件。這種方式屬於面向接口編程的範疇,耦合也比較弱。優勢是調試方便,delegate的調試能夠單步step into。github
幾個理解點:編程
爲何引入Context,或者Context的用途是什麼?數組
VC建立並強引用Context,讓dataHandler和bussinessObject弱引用這個Context,讓本身的子view強引用這個Context。這樣經過Context鏈接業務、VC、View、數據。spa
用戶經過view產生數據,經過Context將數據,交給BussinessObject(將數據model化),交給dataHandler作增刪改,經過KVO,刷新view。3d
Context初始化完成,強引用dataHandler和bussinessObject。爲了不互相強引用,形成內存泄漏,因此CDDDataHandler和CDDBusinessObject弱引用Context。調試
在VC建立bussinessObject時,bo.baseController = self;// 用於bussinessObject處理頁面跳轉(業務)orm
遇到的坑:blog
[_imgAvatarButton sd_setImageWithURL:[NSURL URLWithString:msg.fromUser.avatarUrl] forState:UIControlStateNormal];//由於info裏沒有容許http繼承
EMainController:綁定vc,view,presenter,interactor,context,發消息給IMainView
EMainPresenter:繼承EPresenter,組裝model數組,提供給adapter;發消息給IMainInteractor
EMainView:繼承CDDView,初始化subview
EMainAdapter:繼承EAdapter,能夠重寫dataSource和delegate方法,
EMainInteractor:繼承CDDInteractor,轉場vc
IMainPresenter:自定義協議方法,發消息給EMainPresenter,作具體的事情
IMainView:自定義協議方法,發消息給EMainView,作具體的事情
IMainInteractor自定義協議方法,發消息給EMainInteractor,作具體的事情
MainEntry:繼承EAdapter,定義model,並提供初始化方法
EAdapter:收發數據,執行dataSource和delegate
文獻:http://mrpeak.cn/blog/cdd/
項目實例:https://github.com/music4kid/TKeyboard