Mvp+dagger+rxjava+retrfit+okhttpAndroid开发经验谈Android开发

Android架构--MVC、MVP、MVVM

2017-11-09  本文已影响98人  Jackson杰
前言

MVC、MVP、MVVM是当下Android开发中主要的项目架构,当你开发一个app时,合理的软件架构有利于后期的维护。Android开发中我们可以选择的架构只有以上三种,三种架构各有优缺点,我们可以从中选择最合适我们的架构。

MVC

MVC(Model-View-Controller)是最常见的软件架构之一,也是我们刚开始做Android开发选用的架构。


数据关系为:

在Android中

那么具体到Android项目中呢?我们知道在一个Android项目中,有java目录下的class文件,也有res目录下的各种资源,layout里面的xml文件就对应于MVC的view层,里面都是一些view的布局代码。而各种java bean,还有就对应于model层,至于controller层嘛,当然就是各种activity或者Fragment了。

public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
//数据观察者
    private final DataSetObservable mDataSetObservable = new DataSetObservable();

    public boolean hasStableIds() {
        return false;
    }
    
    public void registerDataSetObserver(DataSetObserver observer) {
        mDataSetObservable.registerObserver(observer);
    }

    public void unregisterDataSetObserver(DataSetObserver observer) {
        mDataSetObservable.unregisterObserver(observer);
    }
    
    /**
     * Notifies the attached observers that the underlying data has been changed
     * and any View reflecting the data set should refresh itself.
     */
    public void notifyDataSetChanged() {
        mDataSetObservable.notifyChanged();
    }
}
缺点

在Android开发中,MVC大家肯定会用,但是这种模式有什么区缺点吗,肯定是有的,要不然也不会有后来的MVP、MVVM了不是。大家可以想想,xml作为View层,控制能力太弱了,比如我们要更换了背景,更换个字体颜色,xml中式无法完成的,你只能写在Activity中,这样就使得作为Controller层的Activity,也充当起了View的角色,最终结果使得Activity代码过于臃肿,我在开发的过程中,稍微复杂一点的界面,Activity可以达到2000+行代码,这样的代码维护起来相信谁都会感到头痛吧。

MVP

MVP作为MVC模式的演化,解决了MVC模式的一些缺点。可以看到,View层和Model层不能直接进行通信了,转而交给Presenter层作为中间的代理。其中Model层和MVC是一样的,但是Activity和Fragment则是纯粹的View层了,不再充当Controller的角色了。所有的交互事件交给Presenter层处理。


数据关系为

public interface ILoginView {
        String getUserName();
        String getPassWord();
        void showToast(String content);
        void closeDispose(Disposable disposable);
        void showProgress();
        void hideProgress();
        void toOtherActivity();
    }
}

`
public class LoginActivity extends BaseActivity implements IView.ILoginView {}

public class IModel {
    public interface ILoginModel {
        void login(LoginBody loginBody, MyCallBack<UserLoginBean> callBack); //登录
    }

}

public class LoginModel implements IModel.ILoginModel {}

MVVM

可以看到,和MVP比较,presenter层换成了viewmodel层,其实view层和viewmodel层是相互绑定的关系,这意味着当你更新viewmodel层的数据的时候,view层会相应的变动ui。



数据关系:

所以MVVM模式一般要结合Google推出的DataBinding,将View和ViewModel层进行数据绑定。

关于MVP和MVVM的例子,以后会给出。

最后

任何的项目框架,都是为项目服务的。没有绝对的好坏之分,只有更合适的选择。在项目进展的不同阶段,做出最合适的调整,才是是更适合团队项目发展的框架。

上一篇 下一篇

猜你喜欢

热点阅读