前言

      相信大家在开发Android应用程序的过程中都会遇到很多重复的功能,许多基础的功能几乎在我们开发过程中无时不刻要接触到。这个时候很多人都会选择依靠Afinal,XUtil,thinkAndroid等一些第三方开发框架。通过这些框架,我们就不再需要一个个的写异步线程去实现网络请求。不再需要自己写图片缓存操作。只需要简单的几句话。就能够快速实现我们想要的功能。相比以往一个个功能自己几十行几百行代码的实现。这些快速开发能够帮助我们提高不少的效率

      然而,随着时间的推进。Android的版本每年一个版本的迭代。许多的开发要求也慢慢在变化。但是这些第三方快速开发框架在没有及时更新的情况下。很容易就会因为没有替换相应的底层库导致问题百出。拿http来说。很多框架还用着google已经不再提倡在2.3以上系统使用的HttpClient。因此,选择一个能够及时更新迭代的库很重要。

      不过,对于多数公司来说。往往是自己搭建一套同样的库。如果你有兴趣,从github下载这些第三方快速开发框架的源码下来研究。就会发现,其实这些库的原理都大同小异。很多都是选择一些目前github上比较火的库进行二次封装,有的则是根据需求。自己封装好相应的实现功能类。通过开放一致的接口调用。这样,开发者们只需要简单的几句调用。剩余的工作都是框架内部封装来实现。

      相信只要仔细研究透这些库的原理。自己也能够试着搭建出一个符合自己需要的快速开发库。本系列教程,我就跟大家介绍介绍怎么搭建出一个类似的库。

原则

      我很赞同我一个领导说的话。设计是十分重要的,设计必须要大于需求。因此,我们首先要考虑好,怎么搭建好这个框架。这个框架需要提供哪些内容,并不是简单的提供一个http get请求的功能就行了。很多童鞋往往需要这个库能够支持post请求。自定义Header等需求。

      想要搭建一个结构良好。便于维护。并且简单易用的快速开发框架需要遵守以下几个原则:

  1. 合理选择需要的模块:并不是越多模块越好,需要考虑好哪些是大家都需要的。过多的内容反而会使这个框架过于臃肿,包的大小太大。这一点往往是开发者选择时候最看中东西。使用你的库。结果自己的APK需要增加好几M。肯定不合适。因此我们要做的是在精不在多。只要提供好一些基础常用,效率高。使用方便的库就行了
  2. 做好二次封装,方便迭代替换:就算再好的库,也有过时的一天。所以不能想着你用的是目前网上公认效率最高。速度最快的库。就直接拿来用。世态无常。当这个库不再受到大家推崇的时候,你要做迭代替换成其他的库。这个时候麻烦就大了。因此。你需要注意。不管你用了什么库。都要给他做一次封装。提供统一的入口。特别要注意参数这一块。举个栗子,一些http请求模块,往往会把参数封装成自己自定义的map来传递,这时候我们就要通过自己的封装,把原本第三方自己定义的参数以系统常见参数的方式来替代。这样就算你实现库更换了。用户也只需要更新一下你的库就行了。不需要再根据你替换的库。所有用到的自定义参数类型都改一遍。这样的迭代成本太高!
  3. 接口设计,多样丰富,简单易用:我们要设计好相关模块在这一需求上尽可能多的场景,例如,http请求。很多开发者会需要自定义header数据。甚至cookie机制。这些我们都是需要考虑进去。并且在设计接口的时候。要尽可能的用通俗易懂的命名,让开发者不需要看注释就能够理解你的接口怎么使用是最高的境界。接口的设计要尽可能提供给开发者自由度,例如参数,直接提供一个map。用户想要怎么封装map都可以。也可以学习volley的接口化编程,让开发者有特殊需求的时候。直接实现你已经定义好的接口来完成自己想要做的事情。不需要再去改动你的源码。
  4. UI归UI,逻辑实现归逻辑实现:很多人喜欢在框架里除了一些基本功能模块之外封装很多的ui组件,其实我并不太赞同。我更建议一些实现逻辑的库集合一个框架。ui库集合一个框架。因为并不是所有的ui他们都会用到。ui的库往往又会带着很多资源文件。这样很大程度上会导致框架占用的资源过多。
  5. 预判错误:当我们设计接口开放的时候,一定要记得考虑全面。预判这个接口可能会有什么样的异常情况。模拟出不同场景。可能是开发者传递过来的参数会是空的。可能这个接口在调用的时候需要网络。没网络的情况下要怎么返回数据告知开发者是什么原因。这个是十分重要的。如果从框架这边不能够告知开发者错误原因所在。这会加大开发者排查错误的难度。
  6. 版本兼容:虽然说接口设计一定要尽可能避免版本迭代需要做大改动。但是难免会有写情况会遇到。因此我们需要考虑通过对框架版本做相应管理判断来兼容各个版本。通过对不同版本的判断,处理相应的逻辑。保证就算你框架升级了。旧版的框架依然能够为用户所用。
  7. 提供生命周期:对于一些复杂流程的模块设计,特别是异步操作类型的模块。一定要提供清晰的声明周期供开发者调用重写。例如异步开始,异步进度,异步结束,异步异常等。这样的话在这些操作下。开发者可以根据自己的需要在不同的声明周期阶段来实现一些ui效果展示给用户。提高框架的扩展性。

总结

      以上就是个人总结出的搭建一个快速开发框架需要遵守的设计准则。可能不够全面,也希望有补充的朋友可以多多建议。在了解这些原则之后,我们就可以开工,开始一步步来搭建适合我们自己的快速开发框架。接下去,我会通过对每个常用模块的各个流行的库进行优势分析。并且提供简单的设计思路,我们一起探索如何选择适合自己的实现库,并封装出适合各个库的开放接口!

24 2

共收到2条回复

AndroidV5 648天前 #1楼

顶一发~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                

0 评论

jike_1183017290 645天前 #2楼

赞一个。。。。。。。。。。。。。。。。。。。。。。

0 评论

加入小组与大家一起讨论吧