Dagger2+MVP+RxJava+Retrofit从放弃到入门

模板地址:https://github.com/xiongmaozhijin/WaterUserManager

Android端的技术变化虽然赶不上白菜的价格涨跌,但也是一天一个样。三天不读书,就跟不上脚步。但问题是,在不断的去所谓学习中,用时间换来了什么。是,讨厌这样的付出得不到应有的反馈。

MVC,MVP还是其他架构,都是为了解耦。把所有的代码组织的各司其职,一个碉堡一把机枪。这样,当要添加需求时,当要改变需求时,当要找到出现问题的地方时,啪啪几下,大概就能找到大致的位置。之前我的有些代码组织就差不多是MVP模式了,只不过不够彻底和少了个名分。View就专门负责UI的交互和变化,这部分由Activity或Fragment来承担;Model,就是专门提供数据的仓库,包括本地的数据和网络远程的数据;Presenter就是桥梁,也是干业务活的,负责响应View的操作,连接Model做业务工作。这样就显得稍清晰。在MVP架构中,View和Presenter是通过抽象接口进行交互的,当然这也是为了解耦。此即,MVP。在实践中,可以发现这种做法显得非常的繁琐。一个简单的功能,全部放到Activity中完成,好像显得也不是未尝不可。

Dagger2,那这个是什么呢?这个倒是不好理解。它是一个对象依赖注入的框架。什么意思?就是说,你按照Dagger2约定的规则来,你需要什么对象,由这个库提供给你,不用你自己生成。那这个库怎么会有自己想需要的对象呢?当然是,按照Dagger2的规则,由你自己提供啦。只不过不同的是,它集中在了一个地方提供,它可以按照层次提供各种依赖对象。在你需要使用的地方,inject注入一下,就可以自动获取了。那这个的好处是,解耦,集中管理,自动化。嗯,实践后,发现还是挺好使的。

RxJava,是Reactive Programming响应式编程的Java实现。什么是响应式编程?不太懂。RxJava的特点是流式操作,线程切换自由,逻辑清晰。比如说,我需要获取一组数据,先客户端判断是否有效用户,如果是则继续。如果数据本地有,就从本地取出;如果本地没有,则从网络取回,并保存到本地。如果常规的写法会是过程式的一段一段的;如果是Rx的写法,则是链在一起,把所有的逻辑组织在一起的流式写法。对于Android来说,改变UI需要在主线程中执行,而耗时的必须另起线程,这种需要线程切换的需求对于Rx来说,是大试牛刀,小菜一碟。所以,Rx也是种封装,然后加上自己定义了一系列的规则,最后使得编写业务变得简洁快速方便。这是矛盾的,因为需要识记新的规则。而识记的这些,最好的结果是“先闻道”,并有可能成为有用的经验。除此外,再无其他。

Retrofit,是对网络请求的封装。是,又是封装,还是封装。目的就是方便使用。那为什么不一开始就搞出个不错的请求框架来呢?今天张三,明天李四。今天网页上跑Java小程序;明天Java小程序上跑网页。有意思吗?不清楚。新瓶装旧酒,旧酒放新瓶,仿佛就像伊辛巴耶娃那样,我来负责创造记录,你们负责惊讶和膜拜吧。不时造出新的茴香豆的“”的写法,然后讨论哪种写法更加的工整。让那些穷酸秀才们夜半点灯去识记吧。对应HTTP请求,记得有本大象书,枯燥规范的介绍了全部一切。对于Retrofit,当然有时间有精力有想法时,可以去学习下作者是如何封装的。

待续……

你可能感兴趣的:(Android)