初探 Android 中的 MVP 模式

本文将会为你介绍什么是 MVP 模式,以及它的长处,并从一个demo入手。

MVP 使用起来真的简单吗?为何要使用它?

什么是 MVP 模式?

  • View 层 用来展示数据以及反馈用户操作。在Android中,此层级包括 Activity, Fragment, android.view.view.View 抑或者是一个 Dialog.
  • Model 层 数据接入层,包括连接本地数据库,或者从服务器拿数据。
  • Presenter 层 view 层和 model 层通信的中介,也就是说view想要展示数据,它需要找 Presenter 来拿,而 Presenter 会去调用 Model 层。Presenter 也被用来处理后台任务。

简单来说,使用 MVP 模式,可以让你的 activity, view, fragment 更加专注于 UI 相关,将业务逻辑剥离出来。这样可以使你的项目低耦合,高内聚,项目更易维护,可靠性倍增,拓展起来更爽。

使用MVP的理由

Keep It Stupid Simple

我们在做任何产品时,都应该保持 KISS 原则(Keep It Stupid Simple),虽然这是从用户角度出发考虑的。但拿此观点,来实现我们的应用架构,同样适用。

而目前市场里面的应用普遍存在以下状况:

  • 我敢肯定的说超过 80% 的应用是在使用 View-Model 的架构层级。(虽然这么说,他们自己并不会承认,因为他们自认为在使用的是MVC模式,activity充当控制层)
  • 很多开发者都在不断增加 activity 的复杂度,甚至一个 activity 的代码行数过千的情况(本人就亲眼见过,说实话我是一行都不想看),而不是将这些逻辑业务独立出来。这也使得后期的维护变得极其复杂。

在只使用 View-Model 模式的项目中,你可以看到以下的关系结构,还真是万物互联啊:

这种结构的项目复杂性你难以想象,其中的组件无法复用,debug 和测试起来都是费时费力,更不要说是重构了。

那么使用 MVP 模式的项目是怎样的呢?

  • 任务复杂性减低,业务更易处理。
  • 更少的对象管理,bug 出现频率减少,更易 debug.
  • 测试更容易.

MVP 的视图层变得如此简单,请求数据时时它甚至不需要回调。整个视图的逻辑变得线性化。

附1:MVP 和 MVC 差异图解:

由上,我们可以看出 MVC 中是允许 Model 和 View 进行交互的,而 MVP 中很明显,Model 与 View 之间的交互由 Presenter 完成。还有一点就是 Presenter 与 View 之间的交互是通过接口的

附2:ribot 架构图:

Demo

这里有我利用 MVP 模式实现的小 demo.

demo项目结构

上面是整个项目的结构图,bean 和 operation 隶属于 model 层,view 层(包括 activity,fragment,viewGroup 视图相关)只负责 UI 相关,presenter 层负责 view 的逻辑业务,二者通过定义的接口进行通讯。

具体代码就不讲解了,这里附上 Domo下载地址,以供下载查看源码.

本文参考:

文章有帮助到您?不妨打赏博主一碗拉面或一杯咖啡的小费吧 :-D!