title: AndroidArchitecture
date: 2016-04-08 23:26:20
tags: [architecture]
categories: [Mobile,Android]
---

概述

本文记录 Android 官方关于项目架构的文章.

Android Architecture Blueprints [beta]

当我们开始明确如何组织和架构一个AndroidApp的时候,Android Framework层提供了很强大的可伸缩性。
这份自由虽然很有价值,但是同时也导致一个APP内存在如过重的类,命名体系不一样,架构导致难以测试,维护和扩展苦难等问题。

Android架构蓝图打算演示解决这类通用问题可能的方法。
在这个项目中,我们会提供一个机遇不同架构概念和不同工具的同一个项目实现。

你可以使用这些例子作为你创建自己的APP的一个参考,或者直接作为一个基础。本篇集中于代码结构,架构,测试和维护性。
然而,铭记于心的是,利用这些架构和工具,创建一个APP有很多方式,取决于你的侧重点。所以,这些架构不应该被当做是经典案例。
本篇例子中UI刻意保持了简单。

beat版的意义

我们一直在做一些可能会影响我们所有例子的决定。所以我们会在发布正式版之前,一直保持初始化的版本号。

例子

所有的例子都发布在他们对应的分支上。查看对应项目上看的README 以获取详细信息。

-todo-mvp/- 基本的MVP架构
-todo-mvp-loaders/- 基于todo-mvp,使用loaders来获取数据
-todo-mvp-databinding/-基于odo-mvp,使用databinding库

 还在进行中的

  • todo-mvp-contentproviders - 基于todo-mvp-loaders, 使用Content Providers
  • todo-mvp-clean - 基于todo-mvp, 使用Clean Architecture的概念
  • todo-mvp-dagger - 基于todo-mvp, 使用Dagger2来进行依赖注入

此外,还有很多计划中的例子。

为何是一个待做的项目

这个APP的目的是能够简单快速的理解,而不是增加演示这个复杂的设计和测试方案的复杂性。
可以查看这个APP的规格。

此外,还有一个类似的JavaScript的项目框架,叫TodoMVC。

我应该为我的APP选择哪个例子

每个例子,都有一个选择的尺度,和比较客观的评估,你可以根据你的实际情况选择。

你可能要考虑到你APP的大小,你整个团队的经验,你预估的维护成本,考虑你是否需要为平板,多平台适配,以及自己的框架偏好。

TODO-MVP

总概

这个例子是其他变种版本的基础。这个例子展示MVP模式的一个简单的实现,没有参杂其他的架构框架。
这个例子,使用手动注入依赖的方式来提供本地和远端的数据。异步的任务是通过callback实现的。

注意:在MVP的上下文中,属于view是被重新重载了。
android.view.View被称作"Android View",在MVP中接受presenter发送命令的view被简单的称为"view".

Fragments

使用fragment有两个理由:
activity和fragment进行隔离,非常适合用来实现MVP。

  • activity作为一个控制器,用来创建和控制view和presenter。
  • 可以充分利用fragment框架进行平板和多屏幕适配。

关键概念

在这个APP中有四个特点:
任务
任务详细
添加编辑任务
数据统计

每个特点有:

  • 约定view和presenter的定义
  • activity负责产生fragment和presenter
  • fragment实现view中的接口
  • presenter实现presenter定义的接口

总之,业务逻辑在presenter中,并且依赖于实现UI工作的view。
view层几乎是不包含业务逻辑的,只负责将presenter中的UI指令转换成UI表现,并且监听用户的UI操作,然后传递给presenter层。
通过接口来约定view和presenter之间的连接。

依赖

  • 常用的Android官方support包(com.android.support.*)
  • Android测试包(Espresso, AndroidJUnitRunner…)
  • Mockito
  • Guava (null checking)

特点

复杂性 - 这个比较容易理解

frameworks/libraries/tools的框架使用

还没有

概念复杂性

这个比较低,作为一个纯MVP实现。

可测试性

Unit testing

高,presenter可以作为仓库和数据源进行单元测试。

UI testing

高, 注入一个假的的module,允许进行假数据进行测试。

Code metrics

和传统没有架构的项目相比,
这个例子简绍了额外的类和接口:presenter,仓库,接口等等,所以在MVP中无论是代码的行数还是类的数量都比较高。

维护性

易于修改和添加新特性

高。

学习成本

低。项目特点明确,责任清晰明确。开发人员不需要了解项目中的外部依赖。

AndroidArchitecture的更多相关文章

  1. Google官方关于Android架构中MVP模式的示例续-DataBinding

    基于前面的TODO示例,使用Data Binding库来显示数据并绑定UI元素的响应动作. 这个示例并未严格遵循 Model-View-ViewModel 或 Model-View-Presenter ...

  2. [译]Google官方关于Android架构中MVP模式的示例

    概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...

  3. Android MVP模式 谷歌官方代码解读

    Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...

  4. Android Weekly Notes Issue #225

    Android Weekly Issue #225 October 2nd, 2016 Android Weekly Issue #225 本期内容包括: Android 7.0的Quick Sett ...

  5. Android Weekly Notes Issue #223

    Android Weekly Issue #223 September 18th, 2016 Android Weekly Issue #223 本期内容包括: Offline时间戳处理; Acces ...

  6. Android Weekly Notes Issue #222

    Android Weekly Issue #222 September 11th, 2016 Android Weekly Issue #222 ARTICLES & TUTORIALS Fo ...

  7. 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean

    十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...

  8. android MVC && MVP && MVVM分析和对比

    相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...

  9. 让你Android开发更简单

    转载:http://www.jianshu.com/p/22ff8b5fdadc 搭建一个新的Android项目,你会怎么做? 每个人对应用框架的理解不相同,但是最终达到的效果应该是一样: ①降低项目 ...

随机推荐

  1. shell习题第6题:监听80端口

    [题目要求] 写一个脚本,判断本机的80端口(加入服务为httpd)是否开启,如果开启就什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知相关人员 [核心要点] 检测80端口使用 ...

  2. MySQL+Service+Servlet+Jsp实现Table表格分页展示数据

    下面以一个示例讲解如何使用MySQL+Service+Servlet+Jsp实现Table表格分页展示数据: eg:请假管理系统 要求如下: 一.打开首页页面, 访问查询请假记录的 servlet , ...

  3. laychat聊天功能

    windows版本:1.直接下载laychat聊天室压缩包,并解压到PHPstudy本地PHP环境中去:2.进入E:\PHPTutorial\WWW\laychat-master\vendor\Wor ...

  4. Delphi 高效读写锁

    本人设计了一个高效读写锁,可实现多个线程读一个线程写的锁,应该比Delphi自带的读写锁高效,本人没有做对比测试. 本文的锁不可以在一个线程里重入,否则会锁死,另外读写锁最多支持65535个线程同时读 ...

  5. 【五】安装fcig

    安装fcig 安装fcig 此步骤是为了让spawn-fcgi能够识别自定义的demo 编译文件 自定义c文件 测试成功后,启动spawn cgi进行代理托管 此步骤是为了让spawn-fcgi能够识 ...

  6. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  7. Freemarker入门(一)——入门与基本概述

    1.概述 1.文档 完美的中文文档:http://freemarker.foofun.cn/ 2.是什么 FreeMarker是一个用Java语言编写的模板引擎.它基于模板来生成文本输出.Freema ...

  8. 20155227 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(Windws + IDEA)实验报告

    20155227 2016-2017-2 <Java程序设计>实验一 Java开发环境的熟悉(Windws + IDEA)实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: ...

  9. 20155316 2016-2017-2 《Java程序设计》第2周学习总结

    教材学习内容总结 学习主要内容:基本类型介绍及流程控制简介 关键点:关键记住JAVA的大体框架,可以类比C语言结合着记.相较于C不同且值得关注的主要信息有: 基本类型的不同:byte.boolean. ...

  10. 2017-2018-1 20155319《信息安全技术》实验二——Windows口令破解

    2017-2018-1 20155319<信息安全技术>实验二--Windows口令破解 实验环境 试验系统:Windows 2003 实验工具:LC5.SuperDic 实验原理 一.口 ...