欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android MVP

程序员文章站 2022-05-12 16:33:50
...

【Android MVP】

Android MVP

声明:本文由作者还不走A投稿。

还不走A的博客:http://blog.csdn.net/dantestones

本文是作者对MVP架构的一点心得,并且提供了一个简单的例子,看起来不会很吃力,希望对大家有帮助。


一、老的MVC架构

刚开始接触Android的时候会觉得Android的整个代码架构就是一个MVC。

  • M : 业务层和模型层,相当与javabean和我们的业务请求代码

  • V : 视图层,对应Android的layout.xml布局文件

  • C : 控制层,对应于Activity中对于UI 的各种操作

看起来MVC架构很清晰,但是实际的开发中,请求的业务代码往往被丢到了Activity里面,大家都知道layout.xml的布局文件只能提供默认的UI设置,所以开发中视图层的变化也被丢到了Activity里面,再加上Activity本身承担着控制层的责任。所以Activity达成了MVC集合的成就,最终我们的Activity就变得越来越难看,从几百行变成了几千行。维护的成本也越来越高

二、新的MVP架构

  • M : 还是业务层和模型层

  • V : 视图层的责任由Activity来担当

  • P : 新成员Prensenter 用来代理 C(control) 控制层

MVP与MVC最大的不同,其实是Activity职责的变化,由原来的C (控制层) 变成了 V(视图层),不再管控制层的问题,只管如何去显示。控制层的角色就由我们的新人 Presenter来担当,这种架构就解决了Activity过度耦合控制层和视图层的问题。

三、一个demo

理念终归要用代码来实现,来看一个很典型的例子,打开一个有列表的Activity界面,请求数据然后刷新界面的过程。先来看看工程的架构 :Android MVP

我分了MVC 和 MVP2种写法的目录,MVP与MVC不同就在于多了2个结构presenter和view。 这里业务层大家就公用了一个biz,先来看看相同的biz 也就是业务层;

(1)RequestBiz

声明了一个接口,带有请求数据业务的方法:

public interface RequestBiz {
    //请求数据业务
    void requestForData(OnRequestListener listener);
}

对应的实现类为:RequestBizImpl

请求的实现类为了模拟网络请求,开启了一个会sleep2秒的线程,然后装填请求的数据,通过OnRequestListener 接口回调出去,与我们平时开发的方式一致。

Android MVP

对应的接口为OnRequestListener

Android MVP

到此业务层完成,上面已经提到业务层不管对于MVC,MVP都是公用的。

这里先看MVC的写法:

(2)传统MVC的写法

Android MVP

请求数据的代码:

Android MVP

比较常见的Activity里面的写法:

  1. 界面的初始化

  2. 发起请求以及请求完成后的界面更新

  3. 点击的监听设置方法。

C: 控制层(点击事件,网络请求), V : 视图层(界面刷新) 。这样代码都耦合到了Activity里面。

(3)MVP的写法

由于Activity变成了view层不再去控制界面,但是具体的界面的改变api其实还是由Activity来提供的,所以在写MVP之前需要思考,View层需要哪些方法。

  • 显示loading

  • 隐藏loading

  • listview的初始化

  • 弹出Toast消息

首先看抽取的接口,MVPView

1.MVPView

Android MVP

通过上面的MVC的例子,我们可以总结出View层需要的接口。

View的接口抽取完毕,就可以可以编写presenter层了, 在presenter中包含MvpView以及我们的业务类RequestBiz,毕竟它相当于View与Model(业务层)的桥梁。

2. MvpPresenter

Android MVP

Presenter完成,现在就剩下一件事,Activity中使用Presenter

3. MvpActivity

Android MVP

静静的享受MVP的感觉吧,就是这么清爽,没有乱七八糟的业务,没有各种点击处理逻辑,Activity只需要提供View层的方法就可以了。

四、一点心得

我们的实际发开中需求往往瞬息万变,每次还要等美工出界面,这样往往会浪费大量时间,但是在MVP的世界这些都不是事,视图层与控制层完全分离,可以让我们在界面还是很粗糙的情况下,先进行控制层的开发,甚至可以先让View层先提供方法出来,这样可以节省很多时间。后面的复杂需求变化,也就是构建接口的时候会变的复杂,但是在有这么多优势的情况下,这点复杂度完全可以接受 还等什么快来加入MVP吧!!!

源码下载地址:https://github.com/haibuzou/MVPSample/tree/master

引用:
Android MVP架构的自述