————閱讀此文章須要有安卓開發經驗————編程
MVC想必你們都不會陌生,我來稍微介紹一下個人MVC架構。服務器
M - 模型層 (model)架構
V - 試圖層 (view)ide
C - 控制層 (control)spa
MVC的目的,細化分工,下降耦合。提升代碼的重用性,可維護性,拓展性,可讀性。code
模型層通常都是API,在服務器上的,Android開發者不須要關心,只管調用就好。blog
視圖層負責顯示信息,控制UI和用戶交互,當須要從服務器讀取數據的時候怎麼辦呢。接口
正確的作法是:開發
告訴控制層:「嘿,控制層,快給我數據,用戶要看,趕忙的。」get
控制層收到指令後:」好的,我這就去拿,準備好了第一時間告訴你。「
一下子控制層處理好數據了,告訴視圖層:「這是你要的數據,拿去給用戶吧。」
試圖層拿到數據展現給用戶,任務完成!
好比說一個顯示天氣信息的應用,視圖層對控制層說:「VIP用戶定位成功,在火星,給我火星的天氣狀況。」
控制層說:「好,我去給你找數據,有結果就告訴你。」
一下子控制層找到數據了;「試圖層,我找到火星最新的天氣狀況了,24攝氏度,八級大風,輻射指數100。「
試圖層開心的拿到了數據,展現給用戶。
以上就說一個簡單邏輯,試圖層和用戶交互,當用戶須要數據的時候,直接丟給控制層,這裏的[VIP用戶,火星]就做爲參數傳遞給控制層。
控制層拿到數據(應該去模型層拿,回頭再說)。數據[24攝氏度,八級大風,輻射指數100]就丟給試圖層。
最後用戶看到數據,不由大喜,老子在火星你都能搞定,幹得漂亮,回頭叫我投資你這APP 十個億。
太羅嗦了,來上部分代碼說明。
//定義接口,用於回調(拿到數據通知視圖層) ,面向接口的實現方式,請務必要理解這段代碼。 public interface SuccessHandler<T> { public void handle(T model); } public interface ErrorHandler { public void handle(String message); }
package com.xxx.modles //放在控制層的包裏面 public class Weather{ //這個類就是天氣的控制層了,它負責弄搞邏輯,弄數據。 public static void getWeatherInfo(用戶級別,地點,final SuccessHandler<Weahter> sh,final ErrorHandler errorHandler){ if(在地球){ //地球的數據很好拿,隨隨便便就拿到了,給你 sh.handle(地球天氣數據); } else if(看看是否是VIP){ //好吧,VIP大爺,給你火星數據 sh.handle(火星天氣數據); } else { //不是就要告訴試圖層,我靠,火星的數據必需要要VIP權限的。 eh.handel("這哥們不是VIP,不能給他火星的數據"); } } } }
控制層就是簡單的作一些邏輯判斷和取數據,不要拿去視圖層判斷。
視圖層代碼
Weather.getWeatherInfo(用戶,地址,new SuccessHandler<List<Weahter>>() { @Override public void handle(List<Weahter> weather) 拿到數據啦,好開心,顯示給用戶。喜歡就給五星評價哦。 } } , new ErrorHandler() { @Override public void handle(String message) { 用戶你好,不是我不幫你,是控制層說 message 吧啦吧啦的不給你,你看着辦吧。 } });
視圖層就只管和用戶的交互,關於數據的事情嘛,丟給控制層好了。
就是這樣,代碼都通過了一些簡化,但願你們能夠理解這樣編程的好處。
理解了以後要多使用,熟能生巧嘛。