1. 程式人生 > >CDD應用層架構學習總結

CDD應用層架構學習總結

.cn src width hand sta ray del mrp 分享

怎麽樣用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應用層架構學習總結