AndroidArchitecture
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的更多相关文章
- Google官方关于Android架构中MVP模式的示例续-DataBinding
基于前面的TODO示例,使用Data Binding库来显示数据并绑定UI元素的响应动作. 这个示例并未严格遵循 Model-View-ViewModel 或 Model-View-Presenter ...
- [译]Google官方关于Android架构中MVP模式的示例
概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- Android Weekly Notes Issue #225
Android Weekly Issue #225 October 2nd, 2016 Android Weekly Issue #225 本期内容包括: Android 7.0的Quick Sett ...
- Android Weekly Notes Issue #223
Android Weekly Issue #223 September 18th, 2016 Android Weekly Issue #223 本期内容包括: Offline时间戳处理; Acces ...
- Android Weekly Notes Issue #222
Android Weekly Issue #222 September 11th, 2016 Android Weekly Issue #222 ARTICLES & TUTORIALS Fo ...
- 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...
- android MVC && MVP && MVVM分析和对比
相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...
- 让你Android开发更简单
转载:http://www.jianshu.com/p/22ff8b5fdadc 搭建一个新的Android项目,你会怎么做? 每个人对应用框架的理解不相同,但是最终达到的效果应该是一样: ①降低项目 ...
随机推荐
- web前端开发从0到1—html结构与常用标签
一:html文档标签结构 <html></html><!--文档片头信息,表示文档内容是用什么标签写的.--> <head></head>& ...
- alibaba之Nacos
本文为转载文章 原文链接:https://windmt.com/2018/11/09/intro-to-spring-cloud-alibaba-nacos/ 上个月最后一天的凌晨,Spring Cl ...
- 安装 jdk
1.打开url选择jdk1.8下载http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- 决策树 - 可能是CART公式最严谨的介绍
目录 决策树算法 ID3算法[1] C4.5 改进[1] "纯度"度量指标:信息增益率 离散化处理 CART(分类与回归树,二叉) 度量指标 二值化处理 不完整数据处理 CART生 ...
- JS の 套路 II ~~
今天的需求是 给表单赋值 还有修改并保存.以下的方法应该是个本方法,但好上手!! 给表单值 <form> <table> <tbodu> 这里假装有一堆表单的一对t ...
- Xcode引入了第三方的类库之后真机调试提示莫名其妙的错误
其中的解决方法就是修改Build Setting里面的Build Active Architecture Only(仅仅编译动态代码),将这个里面的值修改为YES即可.
- Framwork框架日志与配置工具的使用
一.使用设置: 头文件的添加: ..\Framwork\Include\pthread_64; ..\Framwork\CommFramwork\include; ..\Framwork\Utilit ...
- Ubuntu操作系统(我的是ubuntu 18.04.3 LTS)
查看是否开启了ssh服务是否安装,使用命令: sudo ps -e |grep ssh 如果安装了的是会有sshd服务的,下面的图片是没有安装ssh服务 2 先更新资源列表,使用命令: sudo ap ...
- html-头标签的使用
HTML两部分组成 head和body ** 在head里面的标签就是头标签 ** title标签:表示在标签上显示的内容 ** meta标签:设置页面的一些相关内容(用的比较少) <meta ...
- php wamp基础环境搭建
一.apache 安装配置: 1.安装apache 1.1 下载地址:https://www.apachelounge.com/download/ 1.2 将下载的文件解压到你想安装的目录 D:\WA ...