深入探讨MVC MVP MVVM

阅读了《安卓进阶之光》和《安卓源码设计模式》,我对MVC MVP MVVM有了更深的理解,接下来我用白话讲解一下Android中三者各自的特点,如有不妥之处希望各位大佬批评指正。

1.MVC一种业务逻辑、数据、界面显示分离的方法组织代码。

Model:对应数据部分,存取数据(包括从数据库存取和网络获取等)

View:对应界面显示,响应用户交互事件(View依赖Model)

Controller:处理用户交互事件逻辑,通常负责从视图读取数据然后向模型发送数据

缺点:Model和View耦合

        View对应于布局文件能做的事情非常少

        Activity既像View又像Controller,不仅要处理布局文件中的数据绑定操作还要处理事件逻辑。

2.MVP

Model:对应数据部分,存取数据(包括从数据库存取和网络获取等)

View:对应于Activity,负责View的绘制以及与用户交互。

Presenter:负责完成View于Model的交互,处理业务逻辑。(View中有一个Presenter,Presenter与View交互通过接口)

优点:减少了Activity职责简化了Activity代码,view层和model层不再相互可知完全的解耦,将复杂的逻辑代码提取到Presenter中进行处理。

下面通过一张图对比一下MVC和MVP:


3.MVVM

它和MVP的区别貌似不大,只不过是presenter层换成了viewmodel层,还有一点就是view层和viewmodel层是相互绑定的关系(当View发生改变的时候ViewModel通知Model进行更新数据,同理Model数据更新后ViewModel通知更新View),这意味着当你更新viewmodel层的数据的时候,view层会相应的变动ui如图:


参考文献:

https://blog.csdn.net/jiang19921002/article/details/57130836

https://wapbaike.baidu.com/item/MVC%E6%A1%86%E6%9E%B6/9241230?fr=kg_qa&sc_id=z3OheeC

https://www.cnblogs.com/CVstyle/p/6389990.html

https://blog.csdn.net/jdsjlzx/article/details/51174396