一,MVC
mvc的即model数据模型层,view视图层,controller控制层;
view层主要是xml布局文件,model层主要是数据模型,controller层主要说的是Activity.
mvc的简单流程:
view层向controller层发出指令到controller层,
controller通知model层去更新数据,
model层数据更新之后,直接将数据显示在view层.
这就是mvc的工作原理
mvc的优点:
如果逻辑非常简单,mvc还是一个非常不错的选择,因为会降低代码量.
mvc的缺点:
view层的控制能力太弱,如果我们想动态改变一个页面的背景,或动态显示/隐藏一个按钮,这些都没办法在xml文件中直接定义,需要在Activity中进行动态设置,这时,Activity既是controller层,又是view层,会造成Activity中的代码量过于臃肿,杂乱.
view层和model层是可以直接交互的,证明view层和model层存在耦合性,这对于代码的维护性和扩展性是非常不利的.
二,MVP
mvp是对mvc模式的升级,mvp中的model层主要是关于数据的处理,一般进行数据加载和数据存储,而Activity,Fragment变为view层,并且view层和model层所有的交互都是通过presenter中间代理人层进行的.从而使view层和model层进行完全解耦.
mvp的简单流程:
view层通过调用Presenter层接口的方式将业务逻辑转交给Presenter层,
然后Presenter层通过调用model层的接口得到相应的数据,
最后Presenter层通过回调view层接口的方式将数据回传给view层.
这样view层和model层就完全解耦了,同时将Activity中业务逻辑从view层抽取到Presenter中,使Activity中的逻辑更清晰.
优点:
将view层和model层完全解耦
将view层的逻辑抽取到Presenter层中,使view层更专一
缺点:
当项目比较复杂时,MVP框架能使项目更清晰,简化了功能扩展的操作,以及更明了的代码维护.但如果项目逻辑比较简单时,就会使代码显的复杂,有杀鸡用牛刀的感觉.
三,MVVM
和MVP的结构非常相似,viewmodel层的主要作用是将model层的数据转为view层所需要的格式,在Android中主要是通过data binding 的形式去实现.
mvvm的简单流程:
在MVVM中,View层和Model层进行了双向绑定(即Data Binding),所以Model数据的更改会表现在View上,反之亦然。ViewModel就是用来根据具体情况处理View或Model的变化。
优点:
拥有MVP的优点
缺点:
需要熟悉databindig框架,学习成本高,但是还是建议大家花时间研究一下.