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. A在SP.NET跨页多选

    在ASP.NET跨页多选 本文介绍怎样在ASP.NET中实现多页面选择的问题.其详细思路非常easy:用隐藏的INPUT记住每次选择的项目,在进行数据绑定时.检查保存的值,再在DataGrid中进行选 ...

  2. C#6.0 中的那些新特性

    C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...

  3. Visual Studio 中的单元测试 UNIT TEST

    原文:Visual Studio 中的单元测试 UNIT TEST 注:本文系作者原创,可随意转载,但请注明出处.如实在不愿注明可留空,强烈反对更改原创出处.TDD(Test-Driven Devel ...

  4. jQuery中wrap、wrapAll和wrapInner用法以及区别

    原文: <ul>   <li title='苹果'>苹果</li>   <li title='橘子'>橘子</li>   <li ti ...

  5. 百度Web App在线生成平台Site App体验

    最近收到百度开发者中心邮件,告知之前的百度移动建站服务已经升级为Site App了,Site  App顾名思义是可以创建APP的站点,之前想建立一个APP要么是自己制作,要么是选用国外的在线Web A ...

  6. IP地址规划和设计方法

    IP地址规划和设计方法 无类域间路由技术需要在提高 IP 地址利用率和减少主干路由器负荷两个方面取得平衡 网络地址转换 NAT 最主要的应用是专用网,虚拟专用网,以及 ISP 为拨号用户 提供的服务 ...

  7. Ajax运用总结B

    Jquery重新学习之八[Ajax运用总结B]   上一篇简单介绍普通javascript以及Jquery的AJAX方法,其中Jquery.ajax()是功能比较强悍的底层方法,可以更多地关注实现过程 ...

  8. SZU:G32 Mass fraction

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

  9. Hadoop作业提交之TaskTracker获取Task

    [Hadoop代码笔记]Hadoop作业提交之TaskTracker获取Task 一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobC ...

  10. windows下使用git时生成sshkey和配置

    在windows下如何安装git就不介绍了,我这里主要使用的TortoiseGit,主要记录下在windows上如何通过sshkey链接git 在开始菜单中找到git bash,git bash是gi ...