写在前面

讲道理,这次是真的笔者很久都没有更新 blog 了,主要最近维护的框架问题也是层出不穷,而且对技术交流群的解答也让我身心疲惫,所以在这里跟关注我的人说声抱歉,没有定期给你们带来福利,那么这里就给大家带来一个重磅福利:爱吖妹纸 —— Retrofit & RxJava & MVP & Butterknife 的完整 App.

讲到最近让我身心疲惫的问题解答,无疑是让我在开源的路上越走越远,虽然我不是技术大牛,却依然被一些很简单的问题轮番轰炸,其实笔者的内心真的是拒绝的。不得不说,写给技术群内的你和群主,为什么你提问,而总没人回你!写的挺好。

概述

废话也不多说,对于 MVP(Model View Presenter),我相信大多数人都能说出一些的,“ MVC 的演化版本”,“让Model和View完全解耦”等等,但用过 MVP 的人一定会觉得,在 Android 中,代码很清晰,不过多了很多类。对于大多数人而言,在看 MVP 的 Demo 的时候,一眼便是慢慢的 nice,然而让自己来写个例子,却很头疼写不出来。但的确 MVC 模式写起来更加像是顺水推舟。只需要把自己的业务逻辑一股脑的放进 Activity 就成功完事儿。

不得不说,之前我们项目中的确也是用的 MVC 在编写的。很简单的会发现随便一个 Activity 代码都是几百上千行,甚至还有一万行以上的。看起来的确那么一回事儿,但是细想这个 View 对于布局文件,其实能做的事情特别少,实际上关于该布局文件中的数据绑定的操作,事件处理的操作都在 Activity 中,造成了 Activity 既想 View 又像 Controller,鄙弃代码上的不美观来说,对于后面的阅读代码真的是吃力。

不信?你瞧瞧。

也许业务逻辑比较简单的功能用 MVC 没什么,但是想没想过,如果你产品后面改需求怎么办?是的,你接受产品需求的强奸,但还是只有忍辱偷生。在日渐复杂的业务逻辑上,你的 Activity 和 Fragment 代码越来越多,最终导致代码爆炸,难以维护。

网上浏览一圈,发现讲 MVP 的文章比比皆是,可见 MVP 的欢迎度,但大多数文章都只是讲理论,稍微好点的会附带一个简单的登录的 Demo。然而,一个简单的 demo 很难让初次接触 MVP 模式的人掌握它的使用。所以 爱吖妹纸应运而生。

爱吖妹纸的优势?

爱吖妹纸是运用 MVP,Retrofit,RxJava 等主流框架整合的干货 App,项目资源来源于代码家的干货集中营。代码量不多,但基本涉及了各个方面,界面采用 design 风格,所以也是学习 design 的良药。你还在等什么,猛戳链接吧!https://github.com/nanchen2251/AiYaGirl

什么是 MVP

当然不能跑题,前面对 MVP 做了简单的概述,下面还是用一个简单的图表示一下。

如上图所示,在项目中 View 和 Model 并不直接交互,而是使用 Presenter 作为 View 和 Model 之间的桥梁。其中 Presenter 中同时持有 View 层以及 Model 层的 Interface 的引用,而 View 层持有 Presenter 层 Interface 的引用,当 View 层某个页面需要展示某些数据的时候,首先会调用Presenter 层的某个接口,然后 Presenter 层会调用 Model 层请求数据,当 Model 层数据加载成功之后会调用 Presenter 层的回调方法通知 Presenter 层数据加载完毕,最后 Presenter 层再调用 View 层的接口将加载后的数据展示给用户。这就是 MVP 模式的核心过程。

这样分层的好处就是大大减少了 Model 与 View 层之间的耦合度。一方面可以使得 View 层和 Model 层单独开发与测试,互不依赖。另一方面Model层可以封装复用,可以极大的减少代码量。当然,MVP 还有其他的一些优点,这里不再赘述。

看看项目截图?

还是给大家看看项目截图,以免大家心慌。

六、写在最后

笔者也是希望继续在开源路上越走越远,还请大家支持,点击评论 666!别忘了关注我的 github,随手点赞。

做不完的开源,写不完的矫情。欢迎扫描下方二维码或者公众号搜索「nanchen」关注我的微信公众号,目前多运营 Android ,尽自己所能为你提升。如果你喜欢,为我点赞分享吧~

nanchen

【知识必备】浅淡MVP在Android项目中的实战演习,让代码结构更简单~相关推荐

  1. 浅谈Android项目中的build.gradle文件

    一.gradle简介 gradle是基于groovy语言的. Android Studio是采用Gradle来构建项目的.Gradle是一个非常先进的项目构建工具,使用了一种基于Groovy的领域特定 ...

  2. android使用webview上传文件,Android项目中如何在webview页面中上传文件

    Android项目中如何在webview页面中上传文件 发布时间:2020-11-26 15:56:27 来源:亿速云 阅读:68 作者:Leah 本篇文章为大家展示了Android项目中如何在web ...

  3. android开发使用c+_如何在Android项目中开始使用C ++代码

    android开发使用c+ by Onur Tuna 通过Onur Tuna 如何在Android项目中开始使用C ++代码 (How to start using C++ code in your ...

  4. Android项目中最火最常用的优秀开源项目(很有用)

    Android项目中最火最常用的优秀开源项目 分类 详细 框架名称 简介 Star 数 最近 更新 UI 刷新 SmartRefreshLayout Android 智能下拉刷新框架 7.7k 1天 ...

  5. 浅谈反编译在项目中的使用

    浅谈反编译在项目中的使用 什么是反编译 反编译的作用 反编译工具 动态编程 JavaSsist 源码安全 什么是反编译 将可读性较好的高级计算机语言(JAVA,C#,C)转换成计算机能解读.运行的低阶 ...

  6. android数据库导入,Android项目中如何导入数据库

    Android项目中如何导入数据库 发布时间:2020-11-24 16:43:28 来源:亿速云 阅读:110 作者:Leah Android项目中如何导入数据库?很多新手对此不是很清楚,为了帮助大 ...

  7. Android项目中创建编译期的注解

    ==注解 生命周期为RetentionPolicy.RUNTIME,可在运行时通过反射获取. 生命周期为RetentionPolicy.CLASS, 编译期处理的注解,可以使用APT(Annotati ...

  8. Android项目中出现的Plugin with id ‘kotlin-android‘ not found解决方法

    Android项目中出现的Plugin with id 'kotlin-android' not found解决方法 参考文章: (1)Android项目中出现的Plugin with id 'kot ...

  9. flutter打开android界面,在已有Android项目中使用Flutter

    实现效果,在已存在的android项目中接入flutter,即android调用开启flutter页面(使用android打开flutter的指定页面),flutter调用原生android方法 步骤 ...

最新文章

  1. tf.keras.losses.categorical_hinge 分类铰链 损失函数 示例
  2. centos7使用sendmail发送邮件
  3. linux echo命令的-n、-e两个参数
  4. 安装了git之后visual studio 2019变得很卡怎么办?(工具 --> 选项 --> 源代码管理工具【设置成无】)
  5. silverlight 3D 游戏开发
  6. 1.5 编程基础之循环控制 20 球弹跳高度的计算
  7. java模拟摇摆小球程序代码_Android实现左右摆动的球体动画效果
  8. lombok原理_十分钟搞懂Lombok使用与原理
  9. 批量图片处理,打包成zip
  10. SNMP协议交互学习-获取udp的udpindatagrams
  11. 数据结构与算法(三):链表
  12. 2021-04-20
  13. 删除右键菜单多余选项
  14. php变量名动态生成,PHP中动态创建变量名(可变变量) | 学步园
  15. 在HTML页面显示时钟
  16. 运营︱如何实现用户增长?
  17. 量子逻辑电路的初步探索
  18. 如何自己烧制全文RSS(打造自己RSS源)
  19. 细节决定孩子成长的成败
  20. 文化的品位和文化的品格

热门文章

  1. Jenkins TFS配置
  2. 多维数据查询效率分析(1)
  3. Ghost后只有一个C盘解决方法(转)
  4. rpm安装文件制作和使用
  5. php命名空间 动态 new,PHP命名空间(namespace)的动态访问及使用技巧_php实例
  6. C语言经典例74-连接两个链表
  7. 【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )
  8. 【Android WebSocket】Android 端 WebSocket 基本用法 ( 添加依赖和权限 | 创建 WebSocketClient 客户端类 | 建立连接并发送消息 )
  9. php 操作 redis 常用命令
  10. .Net软件测试化之道 [James D.MCCaffrey]