Android中MVC架构设计模式面试问题讲解

1.MVC定义

MVC的全称是Model View Controller,中文意思就是模型、视图、控制器。这是一种软件的设计典范。它用业务逻辑、数据、界面显示分离的方法组织代码。在Android中,M层相当于处理业务逻辑的,而V层就是处理数据显示的部分,C层主要通过Activity来处理用户交互的问题。采用MVC模式,它的好处就是便于UI界面部分的显示与业务逻辑的分离。具体来说,M层用来进行业务逻辑处理,比如说我们会进行一些数据库的操作,网络操作,以及一些复杂操作,甚至一些耗时的任务都会在M层进行处理。V层它主要是应用程序中处理数据显示的部分,在Android中,XML布局就相当于V层。而C层,在Android中,由于Activity处理用户交互的问题,因此我们可以认为Activity是C层。

2.MVC特点

<1>耦合性低:模块代码之间的关联程度不是很高,你可以拆解各种业务模块。利用这个框架可以使View层和Model层很好的分离,这样你就达到了解耦的目的。这也是我们软件开发的一个很重要的目标。它主要是为了减少模块代码之间的相互影响。

<2>可扩展性好:由于MVC具有耦合性低的特点,所以当我们添加代码的时候,扩展代码的时候,甚至当平时迭代需求的时候,就可以不用太多的修改以前的代码,降低bug和线上crash的出现率。

<3>模块职责划分明确:由于它的耦合性低,所以它的模块职责划分明确,就是我们刚才所划分的三个层次,Model层,View层和Controller层。

3.MVC实例讲解

<1>在MainActivity类中,它持有了WeatherModel这个对象,代码如下:

private WeatherModel weatherModel;

该对象在onCreate中进行了实例化,代码如下:

weatherModel = new WeatherModelImpl();

weatherModel顾名思义就是我们MVC中的Model层。

当我们触发某个事件,比如点击,Activity作为Controller层,它会读取View层的数据,比如EditText的数据,然后向Model层发起数据请求,也就是调用了Model层的某个方法,比如getWeather方法,示例代码如下:

weatherModel.getWeather(cityNoInput.getText().toString().trim(),this);

<2>在WeatherModelImpl中,该类为WeatherModel的实现类,其中就有我们刚刚调用的getWeather方法,该方法伪代码如下:

public void getWeather(String cityNumber,final OnWeatherListener listener){
    VolleyRequest.newInstance().newGsonRequest(...,new Listener(){
        @Override
        public void onSuccess(...){
            listener.onSuccess(...);
        }

        @Override
        public void onFailure(){
            listener.onFailure();
        }
    });
}

可以看到,当我们的数据处理完结束之后,它会调用OnWeatherListener这个接口,来通知我们的Controller,也就是Activity数据已经处理完成。

<3>回调接口OnWeatherListener

public interface OnWeatherListener{
    void onSuccess(...);
    void onFailure();
}

这个没什么说的,就是定义一个接口,其中有两个接口方法,一个是请求成功时回调用,一个是请求失败时回调用。

<4>最后我们要在Activity中实现OnWeatherListener,并在重写的两个方法中分别完成请求成功和失败时我们对于UI界面的改变。这时我们回头看,在对Model层方法getWeather调用时,第二个参数我们传入的是this,而Model实现类中方法的形参是OnWeatherListener listener,其实就是将Activity作为OnWeatherListener的实现类传入了该方法。这样我们就将MVC三层联系在了一起。

4.MVC总结

<1>利用MVC设计模式,使得项目有了很好的可扩展和维护性。只要添加接口,实现接口,然后在接口里面实现你想要做的功能就可以。解耦后修改代码也变得轻而易举,如进行UI的修改完全对数据请求没有影响。

<2>controller控制器是一个中间桥梁的作用,它通过接口通信,来协同我们的视图和模型工作,起到了这两者通信的作用。

<3>什么时候适合MVC模式?当一个项目很小,而无需频繁修改需求的时候,根本不需要用到MVC框架模式。MVC一般用在较大的项目当中,业务逻辑处理比较复杂,它的迭代需求也比较频繁,页面显示又比较多,这时候我们可以需求MVC框架模块化设计,来使整个项目更加的模块化,更加的饱满。

你可能感兴趣的:(BAT大牛亲授技能+技巧,Android面试快速充电升级,mvc,面试,架构)