0°

Android架构设计—MVP模式第(一)篇

内容预览:
  • 二、MVP的效果 采用MVP的目的就是使得层次更加清晰,业务逻辑与 UI 分离...~
  • 感觉内容还是比较多的,但是不难,一步一步的看吧! 项目结构划分 如果...~
  • 4、回到View 层的Activity ,调用 Presenter 层获取数据~

始发于微信公众号: 程序员小乐

(点击上方蓝字,快速关注我们)

作者:LooperJing

地址:http://www.jianshu.com/p/f119679a4b7d

MVP 这种模式出现已经很久了,在网上有些关于 MVP 开源代码2014年就有了,近期有关注项目架构方面的内容,于是乎,作为一个还不懂什么是 MVP 的人,那么就一定要了解一下的。网上关于 MVP 的资料其实也不少,通常都要把 MVP 和 MVC 做一下比较,我喜欢直接了当,相信有耐心看MVP的人是一定懂 MVC 的,MVC 的略过。本文的项目地址是: ,下面结合项目谈谈MVP是个什么东西,以下就当作自己的学习总结笔记吧。

一、什么是MVP?

MVP 是 Model、Presenter、View 的缩写,三个部分的关系如下图所示。

Android架构设计---MVP模式第(一)篇

效果图

在 Android 项目中,负责界面展示的模块(所有的 Activitiy 、Fragment以及 View 的子类)都可以划分到 View 这个层次,所有的业务逻辑处理(请求网络数据、数据库读取等)可以划分到 Model 这个层次,为了使得 View 和 Model 之间松耦合,用 Presenter 帮助解耦。所以可以猜测,在具体实现中 Presenter 类肯定要持有 View 和 Model 的引用。现在来说一下,上图中三个箭头的意思。流程是这样子的,从左到右看,比如我们刚进入一个 Activity,那么这个 Activity 做为 View 层,肯定需要通知 Presenter 加载数据,而Presenter会继续调用Model层加载数据,等Model加载完毕后,回调给 Presenter,Presenter 持有View引用,再通知View更新界面。

二、MVP的效果

采用MVP的目的就是使得层次更加清晰,业务逻辑与 UI 分离,那么采用 MVP 以后的效果如何呢?DEMO 实现的是一个列表,效果如图下图所示,列表的内容是一些笑话信息。

Android架构设计---MVP模式第(一)篇


如果上面的页面采用 MVP 的模式进行设计的话,那么Activity中的代码将非常清洁!请看下面。

Android架构设计---MVP模式第(一)篇

Android架构设计---MVP模式第(一)篇

我重新定义了一下 Activity的“生命周期”,这个 MainActivity 继承了 BaseActivity ,BaseActivity 的实现如下:

Android架构设计---MVP模式第(一)篇

如果你觉的还不错,那么可以继续看下面了,下面将具体阐述 MVP 三个部分是如何协同操作的。

三、View层实现

在讲述View层实现之前,首先看一下,项目的整体结构划分,有个大致的感觉。如下图所示。感觉内容还是比较多的,但是不难,一步一步的看吧!

Android架构设计---MVP模式第(一)篇

项目结构划分


如果要实现上面的效果,首先做一下需求分析,每一条的笑话实体类包括的属性有笑话内容、时间;所以建立一个 Joke 实体类是很简单的。View层承担着界面的更新,MVP 中一般将界面更新的职责都交给一个 XXView ,我们的项目姑且叫做 JokeView 。当 Model 层请求到数据的时候,通知 Presenter 层后,Presenter 层就会调用 JokeView 进行界面的更新,所以需要一个设置笑话的方法;请求会有加载时间,所以界面要显示 Loading ,请求结束后需要隐藏 Loading ;当断网等异常情况发生的时候,还需要提醒用户请求发生了错误,所以还需要显示错误界面的方法。综上,定义的 JokeView 接口如下;定义好 JokeView 后,就可以让 Activity 实现 JokeView 接口,重写里面的方法进行更新了。所以我觉得在 MVP 模式开发的过程中,最先确定的就是写一个 XXView。

Android架构设计---MVP模式第(一)篇

四、Model 层实现

在 Model 层中做的主要的工作就是请求网络数据了。请求逻辑我用了 Volley ,具体可以看项目中是如何实现的,也是参考了网上一个开源代码,具体的地址记不清了 。

Android架构设计---MVP模式第(一)篇

其中 OnJokeListener 是 Presenter 层中定义的接口,用与通知 Presenter 层要调用 View 层更新数据。

Android架构设计---MVP模式第(一)篇

五、Presenter 层实现

在 Model 层和 View 层都定义好了之后,就可以写 Presenter 层了,之前已经多次说过 Presenter 层作为 Model 和 View 的桥梁,需要持有 Model 和 View 的引用。Presenter 需要实现 OnJokeListener 接口,具体的实现如下:

Android架构设计---MVP模式第(一)篇

Android架构设计---MVP模式第(一)篇

六、总结

最后重新梳理一下 MVP 的编写方式。
1、 根据项目需求,写一个 XXView 接口。然后让对应的 Activity/Fragment 实现这个接口。View 层基本搞定!
2、编写 Model 层,主要就是网络数据请求了或者其他什么耗时操作,实现方式尽情发挥你的想象,但是最后一定需要用 Presenter 层定义的接口,回调给 Presenter 通知 View 层 更新数据。
3、编写 Presenter 层,Presenter 层需要持有 View 层和 Model层的引用,并且实现 Presenter 层定义的回调接口。在回调接口中调用 View 层的代码 进行界面更新,最重要的是,有一个调用通过Model层的方法,在此方法中,调用 Model 层请求数据。
4、回到View 层的Activity ,调用 Presenter 层获取数据。到此完成。

备注:为了遵守面向接口编程的原则,做了一下接口的抽取。如Presenter 中 实现了 JokePresenter 接口,Model 层中实现了 JokeModel 接口。好了,如果在阅读中,发现了有错误的地方,还望指正。

大家可以可以加群和大牛们(徐宜生、张涛等)一起学习:群二维码如下所示:

  • Android架构设计---MVP模式第(一)篇

  • 如果人满了,可以加我的微信,我拉你进群,我的微信二维码:


  • Android架构设计---MVP模式第(一)篇


看完本文有收获?请转发分享给更多人

关注「技术联盟之巅」,提升编程技能

Android架构设计---MVP模式第(一)篇

每当我看到你的点赞、评论、或打赏都会感觉特别激动和高兴,真希望正如你看我的文章一样。我们共同努力。如果您喜欢此文,感觉对您工作有帮助,预期领导会给您涨工资,不妨小额赞助一下,让我有动力继续努力。

赞助方式如下链接:

http://blog.csdn.net/xiaole0313/article/details/52333666


如果您觉得不错,请别忘了分享到您的朋友圈让更多的人看到!! 您的举手之劳,就是对我最好的支持,非常感谢!

版权声明:【我们尊重原创。此篇干货,版权属于原作者。部分文章推送时因种种原因未能与原作者联系上,若涉及版权问题,敬请原作者联系我们,立即处理。】

本文由吧主分享:http://blog.csdn.net/xiaole0313

推荐文章:


【技术群】279126311 [满]

【技术群】484572225 [未]

如果你有好的文章想和大家分享,欢迎投稿,直接向我投递文章链接即可。投稿邮箱:[email protected]

欢迎扫描关注我们的微信公众号(),不要错过每一篇干货~

一键关注我们微信公众号 

以上就是:Android架构设计---MVP模式第(一)篇 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论