我们为什么要把Dagger2,MVP以及Rxjava引入项目中?

MVP+Dagger2+Retrofit实现更清晰的架构 这个架构已经有不少文章介绍了,今天打算自己实践下。MVP概念不多说了 相关介绍已经很多了 Dagger2:依赖注入框架,用来解决依赖 除了基本依赖 mvp的V–>P–>M的之间依赖也轻松解决 方便不少 Retrofit:用来解决M的RestApi数据获取, 天然支持Rxjava 不过这里我没用到Rxjava 其自带的Callback已经足够用了估计这个架构的难点在于Dagger2 理解它的工作方 阅读详情

原文地址: http://www.jianshu.com/p/91c2bb8e6369

Why?(文章最后有惊喜)

我们为什么要把Dagger2,MVP以及Rxjava引入项目中?

  • 毫无疑问在Android开发圈中这三个技术是经常被提及的,如此多的文章和开源项目在介绍他们,使用他们,开发者也或多或少的被带动起来在自己的项目中使用他们,但是使用他们之前我们知道为什么要使用他们,他们能给我们带来什么好处吗,还是只是跟随潮流

其实我们大多数项目中是使用不到他们的,或者说对这些技术的需求不是很大,为什么这么说呢?

  • 大多数的开发者其实都是在开发功能模块比较少的小项目,对于这些项目来说,其实使用这些技术带来的好处相对于在开发时的所付出的时间来说其实性价比并不高,因为学习这些会有个学习曲线,并且这些技术并不会让你的开发速度加快,相反会让你多写很多代码,比如MVP和Dagger都会让你多写很多类和接口

  • 所以说我们开发小项目根本是感觉不到这些技术给我们带来的好处,也会困惑我们为什么要引入这些技术?

那为什么这些技术会这么火呢?

  • 其实这些困惑大多出现在一直做功能模块比较少的小项目的开发者上,只要你做过比较大的项目,随着代码的增多你就会遇到代码的耦合,团队协作时冲突的解决,类依赖的复杂度等问题,其实这些技术就是来解决这些问题的,所以这些技术大项目用的非常多

这些技术出现是为了解决什么?

  • 想灵活运用一个技术,必然要了解这些技术为什么出现,出现是为了解决什么问题

MVP

MVP的文章很多,我这里就不做过多介绍,我个人的理解就是解耦和扩展以及团队协作,大多数文章都只是介绍了怎么写MVP接口,我们不懂为什么用他们,就算会写也只是在做复制粘贴

举个栗子

  • 我们需要用户点击按钮从网络获取一段新闻消息显示到TextView上,如果都在Activity中做这些事情,OK,非常爽,不用多写MVP相关的接口和类,啪啪啪一下就写完了

  • 但是我们现在需求变了,我们要加入缓存,并且不用TextView显示,使用Toast显示,现在去改Activity,虽然麻烦,但是没问题都是你写的,改改也没问题,但是这个如果不是你写的,你现在去改,要把逻辑重新看一遍,在重新修改之前的代码,如果逻辑一复杂,你重新看一遍逻辑要时间,并且如果改错的话,会影响之前已经写好的功能,这完全违背开闭原则

  • 但是我们用MVP去开发,就可以缩小这些问题,我们只需要在Model层加入缓存逻辑,因为Presenter层拿到的是Model的接口,他只关心Model层返回的数据,至于你的接口是怎么实现的,你的数据是从网络还是数据库还是本地文件获取的,根本不必关心

  • Presenter拿到的也是View的接口,Presenter从Model获取完数据,返回给View,就完成了他的工作,他根本不用管View是怎么实现的,使用TextView显示还是Toast显示,这些都是View的事情,所以他们每层只用把各自的事情做好根本不用管以外的事情

  • 这样我们就可以把View,Presenter,Model拿给三个不同的人写,需求一变不会影响整个代码,将问题最小化,比如UI需求一变我们只用修改View层,出了问题可以马上定位,并且易于测试

Dagger

Dagger的门槛个人认为在这三个中是最高的,相关的文章也很多,但是都很多只是告诉你该怎么写这些类,注解该怎么用,很多都没讲为什么不直接new,为什么要把如此简单的事情弄这么复杂?其实这还是和项目的大小有关,因为它解决的问题就是大项目的需求

举个栗子

  • 我们现在需要一个类叫Car,Car中需要持有一个叫People的对象,People中又需要持有key对象,Ok,这还不简单
Car car = new Car(new People(new Key()));
  • 但是大型项目的实际情况是这样的
A a = new A();
B b = new B(a);

C c = new C(a,b);

D d = new D(c);

E e = new E(a,b,d);
  • 以上只是举个例子,构建一个E,还要构建一堆其他的对象,并且其他对象的构建同样复杂,并且必须按顺序构建,而且需要的对象的生命周期都不一样,有些生命周期可能和Activity一样,有些可能是单例,所以在构建的时候还要考虑对象声明周期,考虑对象的来源,在大型项目,这很痛苦,不光用起老火,别人看代码也和看天书一样

  • 所以这个时候依赖注入框架就派上用场了,我们只用专注于怎么实现功能,对象的依赖关系和生命周期,都让它来帮我们管理,一个Inject,它会按照依赖关系帮我们注入我们需要的对象,并且它会管理好每个对象的生命周期,在生命周期还没结束的情况下是不会重复new的,所以Dagger非常适合大项目,小项目开发者因为项目复杂度低,没遇到这些问题,所以不会理解为什么要用Dagger,让简单的new,变这么复杂

RxJava

提到Rxjava最多人都是用来处理,线程调度,回调地狱,加上Retrofit又支持Rxjava,所以大部分开发者都只会在请求网络和需要切换线程的时候用到Rxjava,其实它有一个最重要的特性,它可以让数据的流向更加直观,代码更清晰

举个栗子

  • 比如说一个庞大的项目,一个事件传递的整个过程可能要经历很多方法,方法套方法,每个方法的位置七零八落,一个个方法跳进去看,跳过去跳过来很容易把脑袋弄晕,不够直观,但是Rxjava可以把所有逻辑用链式加闭包的方式呈现,做了哪些操作,谁在前谁在后非常直观,逻辑清晰,维护就会非常轻松,就算不是你写的你也可以很快的了解,你可以把它看作一条河流,整个过程就是对里面的水流做进行加工,懂了这个特性我们才知道在复杂的逻辑中运用Rxjava是多么的重要

结语

  • 学习新技术,我们不应该盲目的跟风,我们如果不知道这个技术为什么出现,出现是为了解决什么,我们也就不知道为什么运用它,我们就算在项目中使用也无法灵活运用,非常浅显的使用,复制粘贴一些模版代码,也根本无法扩展自己的思维

  • 这些技术虽然比较适合大项目一点,但是还是建议各位开发者开始使用他们,使用他们能扩展自己的思维,让自己考虑耦合,扩展,团队协作之类大项目才会考虑的问题,你如果一直重复的按最简单的方式写项目,什么都不考虑,你就算是5年经验,也只是以第一年的经验重复5年

  • 最后介绍一个将MVP,Dagger,Retrofit,Rxjava等技术相结合并用于快速开发的框架,如果想搭建一个新项目使用这些技术,改了包名就可以直接使用,包含详细的文档,相比于这些技术漫长的学习曲线,我们在实践中学习他们不是更快吗?后面我会写一篇文章,介绍它是怎么将MVP,Dagger相结合并使用到项目中的

Where?

MVPArms一个Mvp快速搭建框架,欢迎你的Star和Issues

SIMPLIS实战:从零构建理想BUCK电路,精准计算与POP稳态分析 本文详细介绍了如何使用SIMPLIS软件从零开始构建并仿真一个理想的BUCK降压电路。通过设定关键参数、计算理想器件值,并搭建仿真模型,文章重点演示了暂态仿真以观察电路上电过程,并深入讲解了高效的POP(周期性工作点)稳态分析技术,帮助工程师快速验证设计、评估稳态性能,从而加速电源设计迭代。 阅读详情

相关推荐

关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer

关于LIO-SAM编译时出现错误: 下载LIO-SAM代码 进入LIO-SAM文件夹,通过以下代码编译: mkdir build cd build cmake .. make 报错: /usr/bin/ld: 找不到 -lBoost::timer collect2: error: ld returned 1 exit status CMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/li

wwtx的博客 3648

Android最流行框架MVP,Dagger2,RxJava

AndroidDeveloper 2016-08-04 17:46 读完本文需要3分钟 平时根据自己的研究,结合目前最流行的技术,将这套android最流行的框架总结如下, 新框架涉及到的内容包括MVP+Dagger2+Retrofit+Okhttp3+RxJava+ButterKnife。 上面内容除了ButterKnife比较简单,学习成本较低外,其他的几个技术点比较消

u011277123的博客 975

RK3568+XS9922B+Android11双模视频输入:CVBS与AHD兼容驱动开发实战

本文详细介绍了基于RK3568平台和XS9922B解码芯片,在Android11系统上开发支持CVBS与AHD双模视频输入的兼容驱动实战。内容涵盖硬件选型、内核驱动框架分析、双模信号自动识别与配置、视频通道切换实现及图像质量优化等关键技术点,为车载监控等需要兼容新旧摄像头的项目提供完整解决方案。

js777的博客 379

android开源库---Dagger2入门学习(为什么使用)

看了前面的文章大概都了解了Dagger2。 那么问题来了,为什么我们要是使用Dagger2呢?具体有什么优势呢? 看看原来的代码public class Boy { String name; public Boy(String name ){ // 修改了构造方法 this.name = name; } public void run()

li15225271052的博客 537

fpga学习——zynq图像处理中的DVP流接口封装

之前文章介绍了基于zynq的图像处理架构问题。其中,作为开发者,需要重点关注图像传感器接口、处理算法、显示接口,这些模块。现在我们一同学习用于视频数据接口的DVP模块,并将其封装成AXI-stream接口便于直接和VDMA IP通信。 DVP_AXI stream IP v1.0使用说明 1.设计概述 •用于cmos传感器视频数据采集,将cmos输出的8位视频数据拼接成RGB 565模式 •AXI_stream主机接口,用于和PS端内存的数据交互 •基于vivado 18.3软件设计 2.模块分析

weixin_41895751的博客 4582

共享单车需求预测问题:建模篇

机器学习训练营——机器学习爱好者的自由交流空间(qq群号:696721295) 在上一篇里,我们使用可视化的方法分析了“共享单车”的数据集,理解了特征(变量)之间的关系。我们将在本篇建立几个模型预测单车的需求量,并比较它们的预测效果。 随机森林填充法 首先,导入必需的库、训练集和检验集。 import pylab import calendar import numpy as np impor...

wong2016的博客 1万+

从0开始搭建rxjava+retrofit+mvp+dagger2整合基础框架(rxjava+retrofit网络层搭建)

古语有云,没有规矩,就不成方圆。其实做什么事都一样,做什么事都要有自己熟悉且大家都认同的一套规矩,这样既能提高自己的做事效率,也方便他人的理解。在移动开发中,mvp是新兴的一种软件开发模式,是经过时间的考验并且大家都认同的解耦框架。它不仅能让我们的代码逻辑更加清晰,不同层间分工不同又相互协作,服务于我们的项目。mode层负责本地数据和网络数据的处理,presenter层负责业务逻辑的处理,view层

白哥哥的博客 4018

【Unity游戏开发】SDK接入与集成——小白入门篇

一、简介   通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感,太尼玛无聊了(Android渠道一弄就十几个,直接吐血)。其实通常情况下接入SDK都是很简单的一个过程,本系列博客就让马三和大家从小白开始,从零基础开始学习如何接入SDK以及一些常见的SDK的...

weixin_34195142的博客 5763

android之dagger2+rxjava+retrofit2+mvp架构的结合

dagger2的优势   省去无谓的体力劳动,增加开发效率,代码解耦 rxjava的优势        尽管项目里的逻辑不断的变为复杂,但是rxjava异步代码依然简洁易懂。         retrofit2的优势     简洁功能却强劲,自定义GSON解析,添加拦截器等 mvp的优势           结构清晰,代码解耦,维护性较高         四个相结合,组成项目的优美整体架构

力学不知疲 1042

详解AUTOSAR:DaVinci Configurator配置CAN和UART数据协议解析器(RH850)(实战篇—1)

通过学习本篇博文项目,将会把所学的DaVinci Configurator知识系统串联起来。

不脱发的程序猿 2811

2️⃣ Coze创建智能体教学(2025年全新版本)

扣子平台提供强大支持,可将智能体轻松集成至各类社交平台,使智能体得以服务更为庞大的用户群体。当下支持集成的平台如下:​1️⃣豆包:作为聚焦 AI 内容创作的平台,非常适合发布充满创意、娱乐性强的智能体。​2️⃣飞书:适合发布用于办公协作的智能体,助力团队提升工作效率。​3️⃣微信:借助公众号或小程序的形式,能够服务海量微信用户。​4️⃣抖音:适合发布与短视频相关的智能体,为用户提供创意与娱乐服务。​

李同学Lino的博客 4577

android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础项目框架搭建(1)--之Dagger2引入

概述 最近由于公司项目的需要, 需要使用android MVP     dagger2     retrofit   rxjava    okhttp来搭建android的基础开发框架;一百度发现网上大把的类似的搭建开发框架的文章, 按照文章的操作介绍搭建下来,中间总是有一些地方打不通,所以被逼的没有办法只有自己去 github上寻找demo自己摸索;通过自己的一番努力,终于将此框架搭建一起了。

lg878398509的专栏 3126

yolov5 FPGA实现及verilog代码仿真

本文介绍了一种基于FPGA的卷积神经网络加速器设计,采用混合架构实现网络功能。该系统将训练和图像预处理等复杂计算保留在PC端执行,仅将主干网络部署在FPGA上。由于片上资源限制,建议通过外接DDR存储扩展容量。文章提供了完整的Verilog HDL源码,包括卷积单元(convUnit)、卷积层(convLayerSingle)和处理单元(processingElement)等核心模块,均已通过仿真验证。该设计采用流水线结构,使用浮点运算单元实现卷积计算,支持32x32图像输入和5x5卷积核处理。系统架构图中

QQ_778132974的博客 576

android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础项目框架搭建(2)--之MVP引入

上一篇文章中,我们已经成功的引入了Dagger2;今天我们将继续使用android MVP模式对代码进行实现。 #1 将MainActivity.java文件移动到ui包下,并在ui包下建立view包; view包下存放接口。包及类结构如图  2 新建presenter包,并在presenter下建立相关的类, 如图 说明:图中RxMapPresenter

lg878398509的专栏 1066

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android用单元测试的多,Android项目中的单元测试

Android项目中的单元测试测试用例采用MVP + dagger架构,网络层采用Retrofit2 + Rxjava,使用登录做了一个简单测试。测试框架使用:Junit、mockito、robolectric。一、首先看下针对MVP各层单元测试选型在demo中,MVP各层所使用的单元测试框架如下图所示:imageP层:不需要任何Android环境,因此使用Junit测试即可V层:使用Robole...

weixin_29023805的博客 272

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RxJava+Retrofit+OkHttp3+Dagger2+MVP构建Android项目简单例子

RxJava+Retrofit+OkHttp3+Dagger2+MVP,最新刚接触这个框架,然后从别人那学来的用上了,写成了一个简单的demo,准备自己的下一个项目用这框架开发

麦田de守望 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MVP+Dagger2+Retrofit2.0+Rxjava看这一个例子就够了

MVP+Dagger2+Retrofit2.0+Rxjava的案例

这个时代,作为程序员可能要学习小程序 1万+

手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界

0.0 Android开发现在的变化用一个词来形容就是 :翻天覆地 越来越多的项目使用了MVP + Rxjava+Retrofit +Dagger2 + DataBinding等等东西。。 但是这些东西对于木有用过的同学们开起来还是比较头疼的。 转载请标明出处:http://blog.youkuaiyun.com/wingichoy/article/details/51981756 网上有很多介绍他们的

旋转 跳跃 然后 团灭 2万+

学习笔记| OkHttp+Retrofit+Dagger2+RxJava+MVP架构

一步一步地讲解各个框架特性及使用

技术无他唯手熟尔 3628

Android实现文章+评论(MVP,RxJava,Dagger2,ButterKnife)

这个项目主要有两个功能,一个加载网页/文章,另一个用来显示评论。并应用了*MVP*模式,*Dagger2*、*RxJava*、*ButterKnife*等开源框架。

大苞米的专栏 6104

TLint for 虎扑体育:基于Dagger2+RxJava+Retrofit的MVP架构详解

TLint for 虎扑体育是一款基于Dagger2+RxJava+Retrofit技术栈开发的Android应用,采用MVP架构模式。这款开源项目为开发者提供了一个学习现代Android开发架构的优秀范例。本文将深入解析这个项目的架构设计,帮助您理解如何将这些主流技术整合到实际应用中。😊 ## 📱 项目概述与功能特点 TLint for 虎扑体育是一个功能完整的虎扑客户端应用,实现了虎扑

gitblog_00387的博客 1088

MVP+Dagger2+Retrofit+Rxjava

整体框架:建议MVP+Dagger2+Retrofit+Rxjava  (xUtils)  或者不用(建议用MVP,再结合需要的框架)[企业级常用] 以下技术  很多公司常用(其中)很多必需用到 ----------------------------------------------------------------------------- UI层 图片加载: 下

JarPlus的博客 2206
下一篇: 你不知道的Retrofit缓存库RxCache
JessYanCoding
博客等级 码龄10年 63粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值