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的更多相关文章

  1. Android架构设计之MVP分析

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51471280

  2. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  3. 转:Android开发中的MVP架构(最后链接资源不错)

    Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...

  4. 转: Android开发中的MVP架构详解(附加链接比较不错)

    转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...

  5. 设计模式笔记之二:Android开发中的MVP架构(转)

    写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...

  6. Android架构(一)MVP架构在Android中的实践

    Android架构(一)MVP架构在Android中的实践 https://www.300168.com/yidong/show-2790.html   核心提示:为什么要重视程序的架构设计 对程序进 ...

  7. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  8. 一种更清晰的Android架构(转)

    一种更清晰的Android架构   一种更清晰的Android架构 原文链接 : Architecting Android…The clean way? 译者 : Mr.Simple & So ...

  9. 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程

    接上篇<android开发艺术探索>读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C. ...

随机推荐

  1. Warning: Cannot modify header information - headers already sent by (output started at

    一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些函数需要在输出流中增加消息头部信息.如果在header()执行之前有echo等语句,当 ...

  2. intellij idea 13&14 插件推荐及快速上手建议 (已更新!)

    原文:intellij idea 13&14 插件推荐及快速上手建议 (已更新!) 早些年 在外企的时候,公司用的是intellij idea ,当时也是从eclipse.MyEclipse转 ...

  3. Linux--安装过程中的根文件系统的分析

    前言: 在这篇文章中S3C6410公版的Linux BSP和U-Boot为了分析,名词和数据文件的所有内容本文是基于环境为例,所有的代码是在设置的示例进行分析的过程中.哈. 假设有不对或者不完好的地方 ...

  4. REST 测试工具

    两款 REST 测试工具 用CURL命令行测试REST API 无疑是低效率的,这里把最近使用的两款 Chrome 插件总结下 POSTMAN 简单易用 REST Console 功能强大 使用的话用 ...

  5. C#实现函数根据返回类型重载

    一直以来都很奇怪为何C#不能直接支持函数返回值重载, 比如如下两个函数是编译不过的 Public Class DbHelper { Public Static int ExecuteScalar(); ...

  6. [转]【Android】9-patch图片以及例子说明

    1.何为9-patch? NinePatch图片以*.9.png结尾,和普通图片(png图片)的区别是四周多了一个边框(如下图所示): 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小) ...

  7. Visual Studio 自定义项目或工程模板

    如何利用 Visual Studio 自定义项目或工程模板 在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志 ...

  8. SQLServer数据库误删数据找回

    记一次SQLServer数据库误删数据找回 昨天 同事在本机清理数据库表时,连接到了生产机,误删了二十几张表,幸好是晚上加班的时候删除的,生产机上当时是一天一备份,还原备份是最后的策略,最关键的还是要 ...

  9. Blend4开发:会飞的小鸟

    1,绘图,动画制作: 2,运行截图: 源码:http://files.cnblogs.com/yuanli/Animals.zip 动画效果参见源码.

  10. SZU:G32 Mass fraction

    Judge Info Memory Limit: 32768KB Case Time Limit: 5000MS Time Limit: 5000MS Judger: Float Numbers (1 ...