todo-mvp
当前版本的app叫做 todo-mvp
,为该 github 项目中的其他示例提供了一个基础。样本旨在:
- 在不适应任何框架的情况下,提供一个基础的 Model-View-Presenter(MVP)架构
- 作为比较和对比该 github 项目中其他示例的参考
提示: 这个 github 项目中所有的分支均使用下面的命名约定,来区分 View类
和 MVP 中的 视图层
:
-
Android View
指的是 android.view.View 类 - 接受 MVP 中的
presenter
发出的命令的 view 就是 视图层
你需要做什么
在开始学习这个示例之前,先熟悉下面的条目可能会对你有些帮助:
这个 todo-mvp
示例使用下面的依赖:
- Common Android support libraries:com.android.support*命名空间中的包提供向后兼容性和其他功能
- Android Testing Support Library:用于支持UI测试的框架,使用Espresso和AndroidJUnitRunner
- Mockito:用于实现单元测试的模拟框架
- Guava:Google提供的一组Java核心库,常用于Android应用程序
设计应用程序
所有的 Android App都会包含与 simple to-do
同样的常用功能,这个 app 由下面四个 UI 组成:
- Tasks:用来管理一个 tasks 列表
- TaskDetail:用来查看或删除 task
- AddEditTask:用来创建或编辑 task
- StatisTics:展示与 tasks 相关的统计信息
在此版本的应用程序,以及基于它的其他版本中,每个 UI 都使用以下的类和接口实现:
- 一个定义了
view
和presenter
之间的连接的contract
类 - 一个用于创建
fragments
和presenter
的Activity
- 一个实现了 view 接口的
Fragment
- 在相应的
contract
中实现presenter
接口的 presenter
presenter 通常托管于特定功能相关联的业务逻辑,而与其绑定的 view 去掌控 Android UI 的工作。view 几乎不含有逻辑过程,它根据 presenter 的命令操作 UI,监听用户的行为动作然后把这些行为动作传递给 presenter。
实现应用程序
每个版本的应用程序都使用不同的实现方式来实现相同的功能,以此来展示不同的架构之间的区别。例如,此版本使用以下方法来解决常见的实现问题:
- 此例使用 product flavor 在编译其替换 modules,为手动或自动测试提供假数据
- 此版本使用回调来处理异步任务
- 使用 Room 将数据存储在本地 SQLite 数据库中
注意下图,此版本的应用程序使用 fragment,这有两个原因:
- 使用 activities 和 fragments 可以更好的解耦、从而更好的实现 MVP。在这个应用程序版本中,Activity 是总控制器,用来创建和连接 views 与 presenters。
- 使用 fragments 支持具有多个视图的平板电脑或UI视图
此版本的app包含了一些涉及到 presenters、repositories、和 data source 的单元测试。此例也包含 UI 测试(依靠假数据),并通过依赖注入来提供虚假模块。了解更多使用依赖注入的快速测试,查看 Leveraging product flavors in Android Studio for hermetic testing
关于程序的维护
此例中包含了 类 和 接口,如 presenters 和 contracts,这就使得代码量相较于传统的(不使用架构的)项目有了一定的增长。
下表总结了用于实现此版本应用程序的代码量。您可以将其用作与此项目中每个其他样本提供的类似表进行比较的基础。
Language | Number of files | Blank lines | Comment lines | Lines of code |
---|---|---|---|---|
Java | 51 | 1216 | 1685 | 3901 |
XML | 34 | 97 | 338 | 608 |
Total | 85 | 1313 | 2023 | 4509 |
网友评论