MVC的概念

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。

在Android开发中,比较流行的开发框架模式采用的是MVC框架模式,采用MVC模式的好处是便于UI界面部分的显示和业务逻辑,数据处理分开。那么Android项目中哪些代码来充当M,V,C角色呢?

  1. M层:适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。
  2. V层:应用层中处理数据显示的部分,XML布局可以视为V层,显示Model层的数据结果。
  3. 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();
    }

results matching ""

    No results matching ""