MVC
MVC, Model View Controller,是软件架构中最常见的一种框架,简单地说就是通过controller的控制去操作model层的数据,并且返回给view层展示,具体见下图
当用户发出事件的时候,view层会发送指令到controller层,接着controller层去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。
对于android项目来说,layout.xml里面的xml文件就对应于MVC的view层,至于controller层就是各种activity了。
MVC存在的缺陷:
1,xml作为view层,控制力太弱了,你想去动态改变一个页面的背景,或者动态的隐藏或显示一个按钮,这些都没有办法在xml中做,只能把代码写在activity里,造成了activity既是controller层又是view层。
2,还有一个重要的缺陷就是view和model层是互相可知的,这意味着两层之间存在耦合,耦合对于一个大型程序来说是致命的。所以才演化出MVP和MVVM两种框架。
MVP
MVP作为MVC的演化,解决了MVC不少的缺点,对于Android来说,MVP的model层相对于MVC是一样的,而activvity和fragment不再是controller层,而是纯粹的View层,所有关于用户事件的转发全部交由presenter层处理。
从图中可以看出,最明显的差别就是view和model层不再相互可知了,完全的解耦,取而代之的是presenter层充当了桥梁的作用。用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并且将数据返回给view层,整个过程中view层和odel层没有联系。大家可能会问,虽然view层和mdel层解耦了,但是view和presenter层不是耦合在一起了吗?其实不是的,对于view层和presenter层的通信,我们是可以通过接口实现的,具体的意思就是说我们的activity,fragment可以去实现定义好的接口,而在对应的presenter中通过接口调用方法。
MVVM
它和MVP的区别貌似不大,只不过是presenter层换成了viewModel层,还有一点就是view层和viewModel层是相互绑定的关系,这意味着当你更新viewmodel等的数据的时候,view层会相应的变动ui.