MVP模式在Android项目中的使用

  • 时间:
  • 浏览:0
  • 来源:彩神大发UU直播现场_神彩大发UU直播现场官方

新闻模块的model主要负责从服务器获取新闻列表信息,接口代码如下:

以上只是 新闻列表请求的整个过程。

网上一搜,讲MVP模式的文章比比皆是。有后来 大多全是讲理论,稍微好点的会附带一有一1个 简单的登录的demo。一有一1个 简单的demo那么让初次接触MVP 模式的人掌握它的使用。只是我决定写一有一1个 稍微复杂只是的新闻客户端SimpleNews(当然只是 相对登录的demo)来展示MVP在具体项目中的使用。 另外SimpleNews还使用了Material Design,也是学习Material Design的一有一1个 好Demo。



好了,切入正文吧。先讲一下MVP的概念。

视图(View):负责界面数据的展示,与用户进行交互;

View层新闻展示模块的是组件是Fragment,后边有一有一1个 RecyclerView、SwipeRefreshLayout。布局代码如下:

实现如下:

根据后边描述,我们歌词 歌词 我们歌词 歌词 将View层的接口定义如下,分别对应后边1个土最好的法律法律依据:

如下图所示,View与Model不不说直接交互,只是 使用Presenter作为View与Model之间的桥梁。其中Presenter中一齐持 有Viwe层以及Model层的Interface的引用,而View层持有Presenter层Interface的引用。当View层某个界面必须展 示只是数据的完后 ,首先会调用Presenter层的某个接口,有后来 Presenter层会调用Model层请求数据,当Model层数据加载成功完后 会 调用Presenter层的回调土最好的法律法律依据通知Presenter层数据加载完毕,最后Presenter层再调用View层的接口将加载后的数据展示给用户。 这只是 MVP模式的整个核心过程。

MVP模式

View层必须调用Presenter层加载新闻信息,只是Presenter必须提供加载新闻信息的接口:

MVP是模型(Model)、视图(View)、主持人(Presenter)的缩写,分别代表项目中1个不同的模块。

当用户切换到NewsListFragment界面完后 ,界面必须展示新闻列表信息给用户。首先NewsListFragment会调用 NewsPresenter的loadNews土最好的法律法律依据,NewsPresenter 的loadNews土最好的法律法律依据中又会调用NewsModel中的loadNews土最好的法律法律依据。NewsModel中的loadNews土最好的法律法律依据中只是 加载数据的核心,通过 Okhttp请求服务器接口获取数据,无论数据获取成功算是,总要通过OnLoadNewsListener接口回调给NewsPresenter 。是是因为着获取成功,NewsPresenter 会调用NewsView的addNews土最好的法律法律依据将获取的新闻列表信息展示到RecyclerView。是是因为着获取失败,则调用NewsView的 showLoadFialMsg土最好的法律法律依据向用户提示失败信息。

在新闻列表Fragment中实现上述接口:

模型(Model):负责防止数据的加载是是因为着存储,比如从网络或本地数据库获取数据等;

  完后 在写项目的完后 ,那么太满考虑架构模式的问题报告 图片,是是因为着完后 总爱 做J2EE开发,而J2EE全是采用MVC模式进行开发的,只是在搭建公司项目的完后 ,也 是使用类事MVC的架构(严格来讲,完后 的项目还算不上MVC模式,只是 简单将网络请求与界面分离,有后来 通过Handle通知更新界面)。你只是写法,在后 面随着项目那么大,Activty是是因为着Fragment中代码也会太满,是是因为项目的维护变的那么复杂。只是必须另外并算是 架构模式来防止你只是问题报告 图片, 在网上浏览了一圈,发现适合Android开发的架构模式非MVP莫属了。

源码地址:https://github.com/liuling07/SimpleNews

新闻列表模块主只是 展示从网络获取的新闻列表信息,View层的接口最少必须如下土最好的法律法律依据:

网络请求使用开源项目OkHttp,OkHttpUtils是对其的封装,具体代码如下:

只是 分层的好处只是 大大减少了Model与View层之间的耦合度。一方面可不还后能 使得View层和Model层单独开发与测试,互不依赖。此人 面 Model层可不还后能 封装复用,可不还后能 极大的减少代码量。当然,MVP还有只是的只是优点,这里不再赘述。下面看下MVP模式在具体项目中的使用。

NewsPresenterImpl的构造函数中必须传入View层的接口对象NewView,有后来 必须创建一有一1个 NewsModel对象。Presenter的具体实现:

将网络请求进行封装可不还后能 减少只是的代码量,有后来 后期是是因为着我想用okhttp了,想加带其它的库,修改起来也方便。

主持人(Presenter):最少协调者,是模型与视图之间的桥梁,将模型与视图分选择离开来。