android MVC 架构介绍,面向接口的编程。
————阅读此文章需要有安卓开发经验————
MVC想必大家都不会陌生,我来稍微介绍一下我的MVC架构。
M - 模型层 (model)
V - 试图层 (view)
C - 控制层 (control)
MVC的目的,细化分工,降低耦合。提高代码的重用性,可维护性,拓展性,可读性。
模型层一般都是API,在服务器上的,Android开发者不需要关心,只管调用就好。
视图层负责显示信息,控制UI和用户交互,当需要从服务器读取数据的时候怎么办呢。
正确的做法是:
告诉控制层:“嘿,控制层,快给我数据,用户要看,赶紧的。”
控制层收到指令后:”好的,我这就去拿,准备好了第一时间告诉你。“
一会儿控制层处理好数据了,告诉视图层:“这是你要的数据,拿去给用户吧。”
试图层拿到数据展示给用户,任务完成!
比如说一个显示天气信息的应用,视图层对控制层说:“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 吧啦吧啦的不给你,你看着办吧。 } });
视图层就只管和用户的交互,关于数据的事情嘛,丢给控制层好了。
就是这样,代码都经过了一些简化,希望大家可以理解这样编程的好处。
理解了之后要多使用,熟能生巧嘛。