Android框架式编程之MVP架构

MVP是Google官方发布的Android开发相关的架构知识。本文要讲解的是一种最基本的MVP的实现方式,它使用手动的依赖注入来提供具有本地和远程数据源的存储库。异步任务处理回调。

基本的MVP示例项目地址:https://github.com/googlesamples/android-architecture/tree/todo-mvp/。

下图是基本的MVP的逻辑图:

注意:在MVP的模式中,View是被重新定义的。

  • android.view.View类被指为Android View。
  • 在MVP中,接受presenter命令的View将被简称为View。

MVP(Model-View-Presenter)模式,将APP的结构分为三层:View - Presenter - Model。

View

1. 提供UI交互

2. 在presenter的控制下修改UI。

3. 将业务事件交由presenter处理。

注意:View层不存储数据,不与Model层交互。

Presenter

1. 对UI的各种业务事件进行相应处理。也许是与Model层交互,也许自己进行一些计算,也许控制后台Task,Servic

2. 对各种订阅事件进行响应,修改UI。

3. 临时存储页面相关数据。

注意 : Presenter内不出现View引用。

Model

1. 从网络,数据库,文件,传感器,第三方等数据源读写数据。

2. 对外部的数据类型进行解析转换为APP内部数据交由上层处理。

3. 对数据的临时存储,管理,协调上层数据请求。

下图是MVP各层的结构示意图:

MVP架构能够将复杂的功能分割为各层内的小问题。各层内功能单一。这样易于功能修改拓展与Debug。解耦的设计,独立的模块,更有利于分工开发与测试。 

在示例Demo中,我们可以看到使用到了Fragments,这里使用Fragment有两个原因:

Fragment和 activity的分离符合实现MVP的思路。Activity是整体的控制器,能够创建和连接view和presenter。

平板形式的布局方式也能够很好的使用到Fragment。

关键概念

在这个sample app里面,有四个功能:

  • Task
  • TaskDetail
  • AddEditTask
  • Statistics 

每一个功能都有:

  • 定义了View和Presenter的联系
  • 一个Activity,负责创建Fragment和Presenter。
  • 一个Fragment来实现View的接口
  • 一个Presenter实现了Presenter的接口

一般来说,业务逻辑应该在Presenter里面存在,依赖View来完成Android的UI操作。而View不应该有任何的业务逻辑存在,它只负责将Presenter的命令转换成UI操作,并将用户的行为传递给Presenter。Contract是定义View和Presenter之间联系的一系列接口。

Dependencies(依赖)

  • Common Android support libraries (com.android.support.*)
  • Android Testing Support Library (Espresso, AndroidJUnitRunner…)
  • Mockito
  • Google Guava (非空检查库)

Features(特性)

MVP 复杂性的理解:

  • 架构的框架/库/工具的使用复杂性:None — 不复杂
  • 概念的复杂性:低,这个是一个Android纯MVP
  • 可测试性: 单元测试 -- 高, Presenter 和 数据源都可以进行单元测试; UI测试 -- 高,允许使用假数据进行注入测试。
  • 代码度量:相比较传统的项目,MVP架构会定义更多的类和接口。所以MVP的代码行数和类的数量都会比较高。
  • 可维护性:高 -- 易于修改和添加一个功能
  • 学习成本:低 -- 功能易于发现,责任明确。开发人员不需要熟悉任何依赖于项目外部的的project。

 

转载于:https://www.cnblogs.com/renhui/p/6277398.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件知识:什么是扩展坞,看完你就明白了

目录 1、什么是扩展坞? 2、为什么会出现扩展坞? 3、扩展坞支持哪些接口? 4、笔记本PCI扩展坞的功能 5、笔记本PCI扩展坞的优点 1、什么是扩展坞? 扩展坞(Docking StaTIon)主要用来扩展笔记本电脑功能的数码…

Union和Union All到底有什么区别

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; UNI…

前端工具:推荐几款UI设计师好用的设计软件

目录 1. Pixso 2. Figma 3.XD 4. Sketch 5、LR 修图神器 推荐几款UI设计师好用的设计软件,感兴趣的朋友可以下载试试! 1. Pixso Pixso是一款综合设计能力超强的一个设计平台,它包含了原型、设计、交付、协作、资源管理一体化等众多的功能于一…

pat 1037

如果你是哈利波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱P和他实付的钱A&…

mysql新增语句

1:方式一 2:方式2

手机知识:NFC是功能介绍

1、NFC简介 NFC是Near Field Communication英文缩写,也就是近距离无线通信技术。由飞利浦和索尼公司共同研发的。NFC属于一种非接触式识别和互联通信技术,通常在移动设备、消费类电子产品、智能硬件工具间进行近距离无线通信。 2、NFC的用途 NFC只是提供…

struts-resultType属性

1.默认dispatcher:forward方式,服务器端跳转 2.redirect:客户端跳转 3.chain:Action转发,forward方式,服务器端跳转action 4.redirectAction:客户端跳转Action 转载于:https://www.cnblogs.com/-beauTiFul/p/6282295.html

手机技巧:关机后的手机还能被定位吗,看完你就懂了

目录 1、手机定位原理 2、如何避免被定位? 大家有没有发现,自己每安装一个手机软件,当你在首次打开的时候一般它都会要求你开启一些权限,最常见的权限就是包括通话、短信以及定位服务的权限。 其中定位服务往往是根据运营商基站的…

有意思的故事

1、http://tieba.baidu.com/p/2359440213?see_lz1&pn1 2、http://tieba.baidu.com/p/2622543838?see_lz1&pn2转载于:https://www.cnblogs.com/weizhxa/p/6282432.html

硬件知识:USB3.0和USB2.0的区别

目录 1、USB的概念介绍 2、USB2.0的特点 2.1、什么是USB2.0 2.2 USB2.0的引脚定义 3、USB3.0的特点 3.1、USB3.0介绍 3. 2、USB3.0的引脚定义 4、USB.2.0和USB3.0的区别 4.1 外观方面 4.2 USB插口引脚方面 4.3 USB公口的外观方面 1、USB的概念介绍 USB是计算机公司和通信公司在…

APP:分享六款非常实用的冷门APP软件,值得一试

目录 1、泼辣修图 2、颜咚- 实用工具合集 3、Tapet-桌面美化神器 4、Lightroom -图片处理神器 5、黑域-手机系统加速神器 6、疯狂番茄-任务管理神器 今天小编给大家分享分享六款非常实用的冷门APP软件,值得一试! 1、泼辣修图 泼辣修图是一款非常专业的手…

有理数分解-数论

题目描述 Description 任何一个[0,1]中的有理数p/q(p、q均为自然数)一定可以分解成1/r11/r21/r3…1/rk&#xff0c;且r1<r2<r3<…<rk。当然这样的分解不是唯一的&#xff0c;如5/61/21/31/21/51/81/120&#xff0c;第一个分解式中的第二项比第二个分解式中的第二项…

Spring系列(四):@Scope注解用法介绍

今天给大家分享Spring中Scope注解的用法&#xff0c;希望对大家能有所帮助&#xff01; Scope 定义以及作用 Scope注解主要作用是调节Ioc容器中的作用域&#xff0c;在Spring IoC容器中主要有以下五种作用域&#xff1a;基本作用域&#xff1a;singleton&#xff08;单例&#…

笔记整理——linux程序设计

数据库 (2013/2/27 16:07:11) 线程 (2013/2/27 15:47:51) 信号 (2013/2/27 15:31:28) 消息队列、共享内存 (2013/2/26 21:52:43) 管道、命名管道 (2013/2/26 21:24:39) 返回一个指向原文件所指向的地址&#xff0c;即两个文件描述符指向同一个文件。进程 (2013/2/26 20:37:25) …

电脑技巧:如何实现电脑一键自动关机和重启?

目录 1、一键关机 2、一键重启 今天小编给大家分享如何实现电脑一键自动关机和重启&#xff0c;感兴趣的朋友可以尝试一下&#xff01; 1、一键关机 首先我们在电脑桌面空白地方点右键&#xff0c;在弹出的属性栏里面找到新建&#xff0c; 在新建下面我们找到文本文档点击它&am…

手机知识:手机OTG知识介绍,看完你就懂了

现在很多的智能手机都自带OTG功能。估计很多朋友很少知道这个OTG功能是什么&#xff0c;究竟有什么用&#xff1f;其实OTG的实用功能还是很多的&#xff0c;今天小编给大家科普一下手机的OTG功能&#xff0c;感兴趣的朋友可以拿起自己的手机试一试&#xff01; 1、手机OTG概念介…

Linux常用的20条运维命令

目录 1、 删除0字节文件 2、 查看进程按内存从大到小排序 3、查看磁盘和分区信息 4、 打开文件数目&#xff1a;检查打开文件总数是否过多 5、 查看网络信息 6、 核心日志&#xff1a;检查是否有异常错误记录 7、 系统日志&#xff1a;检查是否有异常错误记录 8、查看服务 9、 …