MVC的概念
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。
在Android开发中,比较流行的开发框架模式采用的是MVC框架模式,采用MVC模式的好处是便于UI界面部分的显示和业务逻辑,数据处理分开。那么Android项目中哪些代码来充当M,V,C角色呢?
- M层:适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。
- V层:应用层中处理数据显示的部分,XML布局可以视为V层,显示Model层的数据结果。
- C层:在Android中,Activity处理用户交互问题,因此可以认为Activity是控制器,Activity读取V视图层的数据(eg.读取当前EditText控件的数据),控制用户输入(eg.EditText控件数据的输入),并向Model发送数据请求(eg.发起网络请求等)。
举个栗子(获取天气预报数据的小项目来解读 MVC for Android):
1、使用volley请求网络
compile 'com.android.volley:volley:1.1.0'
在MvcApplication类中进行绑定请求队列
VolleyRequest.buildRequestQueue(this);// Volley.newRequestQueue(context)
2、M层
WeatherModel.class
public interface WeatherModel {
void getWeather(String cityNumber, OnWeatherListener listener);
}
WeatherModelImpl.class
public class WeatherModelImpl implements WeatherModel {
@Override
public void getWeather(String cityNumber, final OnWeatherListener listener) {
/*数据层操作*/
VolleyRequest.newInstance().newGsonRequest("http://www.weather.com.cn/data/sk/" + cityNumber + ".html",
Weather.class, new Response.Listener<Weather>() {
@Override
public void onResponse(Weather weather) {
if (weather != null) {
listener.onSuccess(weather);
} else {
listener.onError();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
listener.onError();
}
});
}
}
OnWeatherListener.class
public interface OnWeatherListener {
void onSuccess(Weather weather);
void onError();
}
3、V层是局视图等
4、C层
private WeatherModel weatherModel;
weatherModel = new WeatherModelImpl();//持有M成对象
weatherModel.getWeather(cityNOInput.getText().toString().trim(), this);//发起请求
implements OnWeatherListener//实现交互接口
//拿到请求结果
@Override
public void onSuccess(Weather weather) {
hideLoadingDialog();
displayResult(weather);
}
@Override
public void onError() {
hideLoadingDialog();
Toast.makeText(this, "获取天气信息失败", Toast.LENGTH_SHORT).show();
}