CDD應用層架構學習總結
怎麽樣用context,把數據、view和業務串起來的?
例如:聊天頁面,輸入框view產生的“hello”文本,直接通過context傳遞到BusinessObject進行處理,生成的新消息message通過DataHandler插入到message array之後,直接通知到message tableview進行刷新。方法調用的路徑變短了,意味著調試的時候step over的次數減少了。
通過model+protocol進行耦合。耦合的雙方需要引用相同的model和protocol文件。這種方式屬於面向接口編程的範疇,耦合也比較弱,但比上面的方式強。優點是調試方便,delegate的調試可以單步step into。
文章出處:http://mrpeak.cn/blog/cdd/
幾個理解點:
-
為什麽引入Context,或者Context的用途是什麽?
VC創建並強引用Context,讓dataHandler和bussinessObject弱引用這個Context,讓自己的子view強引用這個Context。這樣通過Context連接業務、VC、View、數據。
- data flow是怎樣的?
用戶通過view產生數據,通過Context將數據,交給BussinessObject(將數據model化),交給dataHandler做增刪改,通過KVO,刷新view。
- 為什麽有的地方用的是weakContext?
Context初始化完成,強引用dataHandler和bussinessObject。為了避免互相強引用,造成內存泄漏,所以CDDDataHandler和CDDBusinessObject弱引用Context。
- bussinessObject的屬性baseController,用途是什麽?
在VC創建bussinessObject時,bo.baseController = self;// 用於bussinessObject處理頁面跳轉(業務)
遇到的坑:
- 為什麽按鈕的圖片沒有顯示出來?
[_imgAvatarButton sd_setImageWithURL:[NSURL URLWithString:msg.fromUser.avatarUrl] forState:UIControlStateNormal];//因為info裏沒有允許http
CDD應用層架構學習總結