Android MVP-编程思想1(什么是MVC-MVP-MVVM模式?)

Posted 0 and 1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android MVP-编程思想1(什么是MVC-MVP-MVVM模式?)相关的知识,希望对你有一定的参考价值。

前言

通过一个小的登录功能模块案例,帮助大家了解MVP。最终实现一个结合Rxjava2,Retrofit 的MVP通用框架。代码放到github上。(如有错误之处,请在评论区指出,谢谢。如果感觉写的不错,请点赞,关注,谢谢。)

目录:

Android MVP-编程思想1(什么是MVC-MVP-MVVM模式?)
Android MVP-编程思想2(代码实现初级版)
Android MVP-编程思想3(内存泄露问题处理,基类封装,有没有必要再使用软引用?)
Android MVP-编程思想4(AOP思想-动态代理运用,反射创建M层实例对象)
Android MVP-编程思想5(如何处理多个P层的问题?)
Android MVP-编程思想6(依赖注入多个P层优化—注解,反射)
Android MVP-编程思想7(为什么使用代理类抽取通用方法而不是工具类?,基类BaseMvpFragment)

未完待续--------
android MVP-编程思想8(集成Rxjava2,Retrofit)

先讲一下mvc

M-数据层:数据库,网络数据
V-视图层:layout,自定义view
C-控制层: 一般是Acitivity,Fragment(处理业务逻辑)

实际上在MVC在andorid开发中很难区分Activity到底应该处于V还是C的角色,因为activity即包含了界面也包含了一部分逻辑处理。不管是数据源、逻辑控制、数据处理等操作一个劲的往 Activity 里写(违背了单一职责的原则),那么它们三者的关系都互相依赖,你中有我,我中有你。遇到逻辑复杂的应用,一个activity可能写到3,5千行。维护起来特别困难,特别是接手别人的项目进行维护。在不断的实践中发现,MVC不适合GUI-视图控制系统的开发。

再说一下mvp

M-提供数据
V-显示视图
P-只处理交互逻辑 (P层是M和V沟通的桥梁)

MVP的出现就是为进一步分离业务逻辑和界面处理,使得各个模块的职责更明确(单一职责)。在MVP中,M与V完全切断联系,由P进行总控。当V接收到了操作,将相应的请求传递到P,由P进行业务处理以及与M进行交互,同时P又在恰当的时机对view进行更新(接口 / 回调方法 / 事件)这样V只需要暴露出接口,V与P通过接口通讯,一方面能够将业务逻辑转移至P,一方面通过接口使得P可以适配多个V。在Android开发中的体现就是将 Activity 中的数据和逻辑处理的代码抽离了出来,把 Activity(Fragment、View) 只当作 View 层,通过一个 Presenter(契约层)将 View 和 Model 层联系起来,让 View 和 Model 层充分的解耦。

提一下mvvm

mvvm模式将mvp中的Presener改名为View Model,原来P层做的事情现在由VM 去做,VM它采用双向绑定将Model和View绑定起来, View的变动自动反映在View Model,反之亦然。这样开发者就不用处理接收事件和View更新的工作,框架已经帮你做好了,双向绑定的机制使得M和V之间的通信工作不需要再使用接口了,
优点:相对于MVP,弥补了MVP模式需要大量接口的缺点。
缺点:V和M一对一绑定,导致V层不能复用,蛋疼吧。有没有解决方案呢? 大家在评论区讨论一下吧?

好了,第一小节到这里就结束了。下一节开始进入代码模式-实现基础版的MVP
如有错误之处,请在评论区指出,谢谢。如果感觉写的不错,请点赞,关注,谢谢。

以上是关于Android MVP-编程思想1(什么是MVC-MVP-MVVM模式?)的主要内容,如果未能解决你的问题,请参考以下文章

Android MVP-编程思想7(为什么使用代理类抽取通用方法而不是工具类?,基类BaseMvpFragment)

Android MVP-编程思想7(为什么使用代理类抽取通用方法而不是工具类?,基类BaseMvpFragment)

Android MVP-编程思想5(如何处理多个P层的问题?)

Android MVP-编程思想5(如何处理多个P层的问题?)

Android MVP-编程思想4(AOP思想-动态代理运用,反射创建M层实例对象)

Android MVP-编程思想6(依赖注入多个P层方式优化---注解,反射)