層級結構,自底向上
持久層(File,Realm,SQLite)<==>網絡層(相信每個公司都有自己的網絡層吧)==>業務層(ViewModel)==>展示層(View,VC)
持久層
耦合到網絡層
設計要點
持久模型的選擇,我這里選擇了文件,直接緩存了JSON.txt。并且維護一張表映射到文件,實現快速獲取,文件超時刪除等操作。持久層的timeout設置,網絡層訪問到這里的時候,如果超時立即拋棄緩存
網絡層
耦合到持久層
設計要點
網絡層的設計是基于離散式的,即一個API接口對于一個Class。實現接口復用,有了為同一個公司的多個APP提供APIKit的可能。網絡層的設計是基于數據流的。也就是說,你訂閱了這個接口,以后這個接口出現刷新,加載數據等,所有的返回及時發送給所有訂閱者。一份請求數據,可以多處訂閱。例如在首頁加載了N個接口,在詳情頁獲取其中某個接口的返回數據,這里你不需要知道那個接口是否加載完成,直接訂閱即可。接口實例是可reload,可refresh,可nexPage得,具體基于業務實現是有緩存開關的是可adaptation的。這里可要求過來接收數據的類型實現JSONConvertable協議是可以統一catch一些errors的。
業務層
業務層耦合網絡層
設計要點
這里的業務層就抽象成一個若干個ViewModelViewModel維護各種數據流,狀態。部分數據是要提供給展示層的展示層和業務層相互訂閱。
展示層
展示層和業務層耦合
設計要點
View單純的包含View。哈哈這里遞歸了。View也提供事件流,以供和業務層進行綁定。例如這里的view里有一個button,點擊button提交數據。這個數據肯定在ViewModel里了。所有,view提供一個buttonClick的信號,ViewModel提供的UploadData的操作。兩者綁定即可。ViewController,主要在這里進行業務層ViewModel和視圖View的綁定,解綁。
轉載自: http://fengdeng.github.io/blog/2016/05/24/xiang-mu-jia-gou-xiao-jie-ios/