mvp现在已经是特别常见的app架构了,本篇的宗旨在于解释一下mvp的思想
你去饭店吃过饭吧?
没去过的先去饭店点一份鱼香肉丝盖饭(不要点外卖),吃完了再回来看帖子
我们去饭店点餐吃饭的流程是怎么样的?
点餐环节如下图所示:

当厨师收到点餐的要求后,一顿操作猛如虎,然后鱼香肉丝做出来了

接下来厨师要把鱼香肉丝给服务员,服务员要把鱼香肉丝给顾客

合在一起就成了下面的样子

为什么饭店的流程都是这样设计的?你直接跟厨师说多好,省了一个传话的,因为要让每个人都专注自己的事情,提高效率,同时防止出错。
有没有这样可以直接跟厨师对话的的饭店呢?有👇

不好意思,放错图了,下面这个才是我真正想放的图片

很明显,上面两个“饭店”中老板又是厨师,又是收银,又是服务员,一人兼任多职,导致自己顾此失彼,混乱中很容易出错。
那么使用mvp模式管理的饭店是怎么样的呢?

在这样的餐厅中吃饭的时候,有服务员专门负责接待我们,把我们送到位置后有专人负责点餐,厨师收到菜单后专注做菜,然后把做好的菜给负责上菜的服务生,服务生最后把菜端给我们。
虽然有点啰嗦,但我相信大家都能听的懂
每个人各司其职,提高了效率,降低了管理难度,降低了出错概率。
这就是生活中的mvp
那么代码中的mvp是怎么样的呢?

解释一下:
view层跟presenter层说我要请求数据
presenter层会直接调用module层的方法请求数据
module层真正去请求数据,这个数据有可能是从服务器获取的,有可能是从本地数据库获取的,有可能是从sd卡获取的,其他对象不必关注数据从究竟是从哪儿来的。
module层获取数据成功/失败后,通过接口将结果回调给presenter层
presenter层再通过view层的接口,回调view层的方法,让view层更新界面
这样,一个mvp架构的网络请求就完成了,像极了你去吃饭的整个流程。
代码中为什么要使用mvp架构呢?
1、分层而制,各司其职,方便管理
2、减少了activity中的代码,activity阅读起来更简单,更便捷
3、每个类中的代码量都会减少,方便阅读管理
4、方便测试,这个以你的水平就不要试图去理解了(😂)
结合我的经典解释,再看看其他人的代码,自己再敲两个demo,相信你最多看上三五遍就可以理解mvp了!
网友评论