Android MVP 架构及布局业务逻辑复用

来源:互联网 发布:淘宝大件物流怎么设置 编辑:程序博客网 时间:2024/06/09 21:51

MVP 架构

首先附上Google官方的 MVP 架构 Github 项目地址

Google Android-Architecture

这里写图片描述

MVP在很多博客,以及百度百科上都有介绍,这里仅仅简单介绍下.

Model

对于Model层也是数据层。它区别于MVC架构中的Model,在这里不仅仅只是数据模型。在MVP架构中Model它负责对数据的存取操作,例如对数据库的读写,网络的数据的请求等。

View

对于View层也是视图层,在View层中只负责对数据的展示,提供友好的界面与用户进行交互。在Android开发中通常将Activity或者Fragment作为View层。

Presenter

对于Presenter层他是连接View层与Model层的桥梁并对业务逻辑进行处理。在MVP架构中Model与View无法直接进行交互。所以在Presenter层它会从Model层获得所需要的数据,进行一些适当的处理后交由View层进行显示。这样通过Presenter将View与Model进行隔离,使得View和Model之间不存在耦合,同时也将业务逻辑从View中抽离。

MVP 的好处

一句话概括:业务逻辑与视图层的分离,业务逻辑与数据层的分离。很多人写Android入门的时候,会把所有的代码集中到Activity或者Fragment上,导致从数据库读取数据,更新页面,跳转页面等各个方法都集中在一起,十分混乱,在业务逻辑以及界面展示发生稍微一点点改变的时候,就会导致改变一个引发其他的BUG。

首先第一点:MVP 离不开 Java 的 Interface 特性,建议掌握好 Interface

举一个MVP的实际例子

复用

举个例子:知乎的用户列表界面,可以是某个用户关注的用户,也可以是某个用户的粉丝列表,还可以是某个问题的关注用户列表,或者是某个用户的黑名单列表。

如果我们要想复用该列表布局的话,(虽然很多应用并不会经常重复使用某一个布局)。此时把所有代码集中到Activity的方法是不可行,那意味着,我们要写很多重复的Activity,每个Activity都会包括更新列表,单击用户头像跳转等重复函数,仅有的不同的是他们获取数据源的方法不同(有的页面是获取问题的关注者,有的是获取用户的粉丝)。

复用View:同一个View,通过接口适配了不同的Presenter 这里是布局复用。
复用Presenter:同一个Presenter,通过接口适配了不同的View 这里是业务逻辑复用。
复用Model:Model的操作比较零散,所以基本不算在复用上。

更新

当然MVP的好处不止复用,最重要的是,只要维护好两个不同层之间的接口调用,我们可以做到对层的重构,不影响其他层。比如View层之前的用户列表是头像在左,介绍在右,现在美工更改了风格,进行了小小调整,对头像进行了圆形裁剪,更改了用户个人信息的显示布局。

MVP 实例

针对刚刚说的知乎用户列表,首先分析,用户列表里那些是视图层(View),哪些是业务逻辑层(Presenter),哪些是数据层(Model)。

View:获取到了用户数据列表后,通过ListView或者RecycleView进行显示用户数据。错误提示:对话框提示。

Model:如何获取用户的数据:网络方法获取,本地缓存获取……以及该次获取数据请求返回的结果:成功还是失败?

Presenter:如何处理数据层返回的结果:成功的话,通知View显示信息,失败的话,通知View进行失败提示。同时Presenter经常也会用于View层的业务逻辑,比如检测密码是否一致,用户名是否规范等等。

onViewDataReceive(UserInfo user);onViewDataReceiveError(String cause);onDataReceive(UserInfo user);onDataReceiveError(String cause);

之前的数据接受错误是弹出一个对话框提示,而现在我要改成从底部出现SnackBar通知

#

原创粉丝点击