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。
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
- Guava (null checking)
Features(特性)
MVP 复杂性的理解:
- 架构的框架/库/工具的使用复杂性:None — 不复杂
- 概念的复杂性:低,这个是一个Android纯MVP
- 可测试性: 单元测试 -- 高, Presenter 和 数据源都可以进行单元测试; UI测试 -- 高,允许使用假数据进行注入测试。
- 代码度量:相比较传统的项目,MVP架构会定义更多的类和接口。所以MVP的代码行数和类的数量都会比较高。
- 可维护性:高 -- 易于修改和添加一个功能
- 学习成本:低 -- 功能易于发现,责任明确。开发人员不需要熟悉任何依赖于项目外部的的project。
Android 架构艺术之MVP的更多相关文章
- Android架构设计之MVP分析
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51471280
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- 转:Android开发中的MVP架构(最后链接资源不错)
Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...
- 转: Android开发中的MVP架构详解(附加链接比较不错)
转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...
- 设计模式笔记之二:Android开发中的MVP架构(转)
写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...
- Android架构(一)MVP架构在Android中的实践
Android架构(一)MVP架构在Android中的实践 https://www.300168.com/yidong/show-2790.html 核心提示:为什么要重视程序的架构设计 对程序进 ...
- Android App的设计架构:MVC,MVP,MVVM与架构AAAAA
1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...
- 一种更清晰的Android架构(转)
一种更清晰的Android架构 一种更清晰的Android架构 原文链接 : Architecting Android…The clean way? 译者 : Mr.Simple & So ...
- 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程
接上篇<android开发艺术探索>读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C. ...
随机推荐
- 【麦子学院】OpenCV教程函数总结
个自带样例. parter 1: No1. adaptiveskindetector.cpp 利用HSV空间的色调信息的皮肤检測,背景不能有太多与肤色相似的颜色.效果不是特别好. No2. bagof ...
- CSS3实战开发: 纯CSS实现图片过滤分类显示特效
原文:CSS3实战开发: 纯CSS实现图片过滤分类显示特效 各位网友大家好,今天我要带领大家开发一个纯CSS的图片分类显示的网址导航,单纯看标题大家可能有些困惑,依照以往惯例,我先给大家演示一下实际运 ...
- MVC5 + EF6 + Bootstrap3 (8) HtmlHelper
MVC5 + EF6 + Bootstrap3 (8) HtmlHelper用法大全(上) 上一节:MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统 源码下载:点我 ...
- Mac OSX系统安装和配置Zend Server 6教程(2)
继上一节安装好Zend Server 6以后,我们需要修改配置文件.首先修改服务器监听端口.默认的情况下Zend Server 6安装以后的端口是10088.一般开发者使用的都是HTTP默认端口80. ...
- SQL 中OPENQUERY的使用
原文:SQL 中OPENQUERY的使用 OpenQuery 是SQL Server用来与其他Server交互的一种技术,通过OpenQuery,SQL Server 可以直接访问其他数据库资源. 而 ...
- javascript 学习总结(五)Function对象
1.Function 函数调用(类似call方法) function callSomeFunction(someFunction, someArgument){ return someFunctio ...
- html5 Geolocation(地理位置定位)学习
1.html5 Geolocation html5 Geolocation API 使用很简单,请求一个位置信息,如果用户同意,浏览器会返回一个位置信息,该位置是通过用户的底层设备(手机,电脑) 提供 ...
- Oracle中的Union、Union All、Intersect、Minus
Oracle中的Union.Union All.Intersect.Minus 众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包括 ...
- Oracle笔试题库 附参考答案
1. 下列不属于ORACLE的逻辑结构的是(C) 区 段 数据文件 表空间 2. 下面哪个用户不是ORACLE缺省安装后就存在的用户(A) A . SYSDBA B. SYSTEM C. SCOTT ...
- Ubuntu下安装Pyqt4
确保系统中安装有python之后,在终端输入: sudo apt-get install libxext6 libxext-dev libqt4-dev libqt4-gui libqt4-sql q ...