觉得自己的项目架构不够好用,来学习下Google出的andorid 架构蓝图,项目地址:
http:// https://github.com/googlesamples/android-architecture/blob/master/README.md
里面的demo真不少,最单纯的mvp架构,使用了Clean 架构的mvp,使用了dagger,rxjava等依赖的mvp和mvvm数据绑定架构等等。(等着我来一一解锁吧,啊哈哈哈哈)
一.start one by one, 首先看最简单的 todo-mvp
todo-mvp是一个简单的MVP架构,没有使用任何架构框架,也是该项目中其他demo的基石,可以用作对比参考其他demo的变化。
需要的准备
开始前,先阅读项目中的 README 文件。
需要了解什么是MVP,参考链接 -> https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter(打不开)
项目中使用到的依赖库:
- Common Android support libraries 安卓兼容库,向下兼容或者其他功能
- Android Testing Support Library UI测试框架,包含 Espresso, AndroidJUnitRunner.
- Mockito Mocking框架,用来实现单元测试
- Mockito Google提供的一组Java核心库,常用于Android apps.
(连最简单的demo中,都有UI测试和单元测试依赖啊,我也得用起来,提高代码的稳定性)
设计app
所有Android Blueprints app 的app是一个简单的待办事项类型的应用程序,其中都包含相同的基础功能。App由4个页面组成
- Tasks - Used to manage a list of tasks.
- TaskDetail - Used to read or delete a task.
- AddEditTask - Used to create or edit tasks.
- Statistics - Displays statistics related to tasks.
每个页面实现下面的类或接口
- A contract class which defines the connection between the view and the presenter.
- An Activity which creates fragments and presenters.
- A Fragment which implements the view interface.
- A presenter which implements the presenter interface in the corresponding contract.
Presenter主要负责处理一个特定功能的业务逻辑,与之相对应的view处理Android UI层的工作;view 层几乎不包含逻辑,它将presenter的指令转化为UI 行为,并接收用户的行为后传递给Presenter。
(contract类定义view和presenter之间的联系,像一个协议类,自己写没用过类似contract的东西,好奇,写的啥)
实现app
不同版本app使用不同的方法去实现同样的功能,便于展示和对比架构设计的不同。例如,本版本使用了下面方式实现:
- demo使用product flavors替代module在编译期,在人工或自动化测试方面提供假数据
- 使用callbacks回调处理异步任务
- 使用Room存储数据到本地SQLite数据库
同时注意下面的说明,本项目使用fragment有2个原因:
- activities 和 fragments的使用都是考虑更好地分离关注点从而促进MVP的实现。在这个app的版本中,Activity 是一个全局的控制器,生成并连接views 和 presenters。
- 使用fragments 支持平板布局或具有多个视图的UI屏幕
项目中有一些单元测试包括presenters,仓库,数据源等,也有一些UI 测试,依赖一些假数据并且是通过依赖注入来提供。
更过通过依赖注入来方便测试的信息,看 Leveraging product flavors in Android Studio for hermetic testing。
https://android-developers.googleblog.com/2015/12/leveraging-product-flavors-in-android.html
维护app
为了方便和没有使用特定架构的传统项目或者与该项目的其他版本app进行对比,下面统计了本demo的代码行数。
好了,把demo拉下来,跑起来,看看吧!地址: https://github.com/googlesamples/android-architecture/tree/todo-mvp/