GitHub上star超过2k的安卓MVP架构指南

917 字
5 分钟
GitHub上star超过2k的安卓MVP架构指南

近日在搜MVP模式作为安卓项目架构时候,发现GitHub上一篇介绍MVP架构的文章。一看star已经超过2K了。通读全文发现作者用实际项目将MVP架构要怎么分职责讲得十分通俗易懂。为了方便大家查阅,把原文翻译了一下。作者还有一篇文章讲安卓项目和代码风格指南的。欢迎查看相关翻译

架构指南#

我们的安卓APP架构基于 MVP (Model View Presenter) 模式。

  • View (UI 层):这是 Activities, Fragments 和其他标准安卓控件所在层。它的职责是呈现从Presenter收到的数据给用户。它也处理用户的交互和输入(点击监听等)以及在需要时触发Presenter中对应的动作。

  • Presenter: Presenter 订阅由 DataManager 提供的 RxJava Observables。他们负责处理订阅的生命周期,分析/修改DataManager返回的数据,调用View中的合适方法以便展示数据。

  • Model (Data 层): 它们的职责是取回,保存,缓存,以及通知数据。它可以与本地数据库以及其他的数据仓库通信,使用restful API或者其他第三方SDK等方式。它分为两部分:一组帮助工具类以及一个 DataManager 。工具类的数量因项目而异,每一个工具类有特定的功能,比如与API通信或在 SharedPreferences 中保存数据. DataManager 把不同工具类的输出使用rx操作符进行组合变换,所以它可以: 1) 提供有意义的数据给 Presenter,2) 把经常一起出现的动作组合在一起。这一层也包含实际的实体类,定义数据结构是怎样的。

从右到左看示意图:

  • Helpers (Model): 一组类的集合,每个类有特定的职责,他们的功能可以从与API或数据库通信,到实现一些特定的业务逻辑等。每个项目会有不同的工具类,但最常见的几个是:

    • DatabaseHelper: 它处理插入,更新,以及获取来自本地SQLite数据库的数据。它的方法返回 Rx Observables ,发射(译者注:Rx术语)简单java对象 (models)。
    • PreferencesHelper: 它保存以及获取来自 SharedPreferences 的数据,他可以返回 Observables 或者直接返回简单java对象。
    • Retrofit services : Retrofit 接口 使用Restful API 通信,每个不同的API拥有自己的 Retrofit 服务. 它们返回 Rx Observables.
  • Data Manager (Model): 这是MVP架构的关键部分。它持有每一个工具类的引用,使用这些工具类满足来自Presenter的请求。 它的方法广泛的使用 Rx 操作符来组合,转换或过滤来自工具类的输出,以便生成Presenter想要的输出。它返回发射数据模型(data models)的 observables。

  • Presenters: 订阅由 DataManager 提供的observables,处理这些数据以便调用View中合适的方法。

  • Activities, Fragments, ViewGroups (View): 实现了一组Presenter可以调用的方法的标准安卓组件。它们也处理用户的交互如点击等,然后调用Presenter中合适的方法来采取相应的行动。这些控件也实现框架相关的任务,如管理安卓生命周期,渲染视图(Views)等。

  • Event Bus: 它使得View控件得到发生在Model的特定事件通知。通常 DataManager 发出事件,然后这些事件可以被Activities 和 Fragments 订阅。 event bus 仅仅 用于非常特别的动作——这些事件不是仅与一个界面相关的,要通知多方,如:用户已经退出登录。 原文链接 译文链接

欢迎关注我的公众号

如果这篇文章对你有帮助,欢迎扫码关注公众号,后续会继续分享技术实践、踩坑记录和效率工具。

微信公众号二维码

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
GitHub上star超过2k的安卓MVP架构指南
https://suqishuo.cn/android-architecture-guideline-for-mvp/
作者
Ernest
发布于
2017-03-28
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
GitHub上star超过2k的安卓项目和代码风格指南(绝对干货)
最佳实践近日在搜MVP模式作为安卓项目架构时候,发现GitHub上一篇介绍MVP架构的文章。一看star已经超过2K了。作者同项目的这篇文章讲安卓项目和代码风格指南,也非常有参考价值。为了方便大家查阅,把原文翻译了一下。点击查看作者介绍安卓MVP架构指南的翻译文章。
2
Gradle 依赖反复下载?缓存回收与排查指南
开发效率项目关掉一段时间再打开,Gradle 重新下载所有依赖的四个主要原因及对应解决方案。
3
Linux 命令手册安卓版
工具前两天逛GitHub时候发现了一个命令行手册项目jaywcjlove/linuxcommand 手册网站,觉得非常实用。GitHub的Pages很方便,但是国内访问有时候比较慢。虽然网上类似的在线手册很多了,但是我觉得一个手册应该是随手可用,而且即使在没有网时候,也可随时翻阅的。
4
安卓开发相关框架文章收集(长期更新)
开发效率在做项目初期,如果知道有哪些框架/工具可用,对项目的开发会有很大的帮助。这篇帖子收集项目开发用过的,或者有类似需求不知道有对应工具,后来发现这些工具有相见恨晚感觉的。作为一个类似于备忘录的帖子,根据个人判断在需要的时候进行增删改查。介绍时候尽量用一两个关键词。收集的文章可能会因各
5
Evernote带来的计划任务神器Android-Job
开源框架在新版本安卓版本(API23以上)中,谷歌把`android.net.conn.CONNECTIVITYCHANGE` 这个广播废弃了。总的来说,应用不应该依赖这个广播来执行相关任务,而应该使用 `JobScheduler` 或者 ` GCMNetworkManager`。计划任
随机文章随机推荐
Profile Image of the Author
Ernest
一个有理想的Android程序员
公告
欢迎关注我的公众号,第一时间获取技术文章与实践记录。
微信公众号二维码
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
29
分类
12
标签
53
总字数
126,599
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.6
文章许可
CC BY-NC-SA 4.0

文章目录