如何合理封装你的轮子、飞机、大炮(以封装OkHttp为例)
前言
对于程序员来说,很多时候,我们都在造房子,从学会框架或者是学会构建整个项目之后,慢慢的我们就会觉得自己在做的事情是一种重复劳动,很多时候只不过是换个面孔而已。而更快的造房子,造好看的房子可能是进一步你想要做的。
封装
可能是你要学会的第一步,它能帮你学会造出你需要的合适的工具,而这些工具能帮你更快的造出你想要的房子。
封装的定义
我对封装的定义 ———— 将项目中需要多次使用,或者是重复劳动,或者是复杂且难看的代码,打包在一起(抽离出来)作为一个通用的东西来使用
封装可以是对自己写的代码进行封装,也可以是对别人写的工具或者是框架进行封装,都可以。俗话说的好,写代码就是:要不就是将别人的轮子拿来用,要不就自己造轮子给别人用。别人的轮子不够用,就改装成飞机大炮自己用。
封装的意义
1、减少重复代码,让代码看起来整齐好看
2、减少重复开发,让开发速度变快
3...
这里不列举了,说白了向面试官吹牛也可以算是意义吧...
封装的步骤
1、找到需要封装的代码(封装永远不是空想出来的)
可能是你项目本身需要封装,又或是你看别人工具想要封装...
2、列出封装的目标
一开始我建议还是列出来靠谱,因为这样不会让你忘记最终的目标是什么。
3、封装
然后就开始做吧!
4、测试
写出你认为所有的在实际中的测试用例单元测试来测试你的工具
5、优化
对不合理的地方进行优化,对用的不爽的地方进行优化
6、打包
打包发布,到实际的生产中去使用吧
以OkHttp为例进行封装
---如果你不知道okhttp那么你可以去了解一下再往下看。
找
在实际的项目中如果要发送http请求,那么我喜欢使用okhttp工具来完成这个事情,而实际使用的时候,我们每次请求都需要构建整个请求,显得非常麻烦,每次都需要对请求的参数和返回的参数都进行构建,也很麻烦,所以我觉得有必要封装一下
目标
我只是封装三种类型的请求:
1、get请求
2、post请求 json格式
3、post请求 form格式
请求返回格式都是为json格式
要求:
调用请求方法,输入url地址、请求对象,输出请求返回的对象
封装 + 测试 + 优化
(第一步最关键:先上网找找有没有合适的,别人已经封装过的信息,一方面是看看是否适合自己使用,另一方面,即使不能符合自己,那也可以看看是否能从中找到一些可以值得借鉴的地方)
整个过程我描述一下:
1、先把所有的代码写在了一个类里面
2、然后分离出需要的工具接口
3、然后分离内部需要的方法
4、抽离重复的部分
5、针对传入对象进行泛型优化
6、编写单元测试进行测试
7、编写注释和使用markdown
全部代码:https://github.com/LinkinStars/http-helper
总结
1、这里封装是很个性化的一种封装,这样的封装多数是一种定制化的工具,你自己用会觉得很方便。
2、封装会用到很多技术:泛型、反射...
3、封装需要考虑的点很多:因为作为一个工具,你需要考虑到很多人的使用情况,很多测试都是需要做的。
4、封装的优化很多时候会考虑使用设计模式让整体更加优雅。
5、一开始是封装一些别人写的工具,后面是封装一些自己写的代码,在后面是封装一些框架。
6、越原始的封装,封装到最后依赖的越少,封装最后的包越小,使用起来越来越方便。
这里是对封装的一个举例,封装的工具本身不一定对你适合,你需要封装属于你自己的工具,如果你有好的建议,赶紧砸过来吧。
如何合理封装你的轮子、飞机、大炮(以封装OkHttp为例)的更多相关文章
- [ES4封装教程]3.使用 Easy Sysprep v4 封装 Windows 7
(一)安装与备份系统 1.安装 Windows 7 可能很多人会说,安装Win7谁不会,这也用说?装Win7的确人人都会,但如何安装才是最适合系统封装的,就未必是人人都会了.安装是封装之本,没有好的安 ...
- 手把手封装数据层之DButil数据库连接的封装
最近这段时间一直在用SSM框架做增删改查,突然想把以前还不会用框架的时候,综合百度和各种资料结合API文档抄袭而来的数据层的封装分享给大家.这边先封装一个DButil. 我这个封装就是烂大街的那种,没 ...
- JDBC连接数据库方法的封装,以及查询数据方法的封装
(在上一篇文章中,我们详细的介绍了连接数据库的方法,以及eclipse操作数据库信息的相关方法,在这里我们将主要讲封装.) 主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个 ...
- [官方教程] [ES4封装教程]2.使用 Easy Sysprep v4 封装 Windows XP
(一)备份当前操作系统封装的第一步,其实是备份当前安装好的操作系统.避免我们在之后的步骤中出现问题,以至于还要重新安装操作系统,浪费时间精力.系统备份想必大家都会.对于WinXP而言,建议使用Ghos ...
- 瞎j8封装第二版之数据层的封装
看了以前写的代码,对就是下面这个 手把手封装数据层之DataUtil数据库操作的封装 觉得以前写的代码好烂啊!!!,重新理了一下思路,写得更规范和简练,应该效率也会高很多,用了一下下午写的连接池(半废 ...
- 试试自行封装AJAX和jQuery中的ajax封装的基本使用
封装的套路: 1.写一个相对比较完善的用例2.写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体3.根据使用过程中的需求抽象函数 代码记录如下: <script> function ...
- 【AngularJS学习笔记】封装一些简单的控件(封装成Html标签)
bootstrap有强大的指令系统,可以自定义一些属性,基本知识请移步:http://angularjs.cn/A00r http://www.cnblogs.com/lvdabao/p/33916 ...
- Linux组件封装(三)使用面向对象编程封装Thread
C++11提供了thread,但是过于复杂,我们还是倾向于在项目中编写自己的Thread. Posix Thread的使用这里不再赘述. 重点是这个函数: #include <pthread.h ...
- 分享一个Delphi跨平台Http库的封装,一个Delphi跨平台TCP库的封装
{ 单元名:跨平台的TCP客户端库封装 作者:5bug 网站:http://www.5bug.wang } unit uCPTcpClient; interface uses System.Class ...
随机推荐
- 结队第一次 plus
作业描述 作业所属课程:软件工程1916|W(福州大学) 作业要求:结对第一次-原型设计 结对学号:221600328 221600106 作业目标:尝试结对合作,使用NABCD模型,会分析用户需求, ...
- BZOJ.4137.[FJOI2015]火星商店问题(线段树分治 可持久化Trie)
BZOJ 洛谷 一直觉得自己非常zz呢.现在看来是真的=-= 注意题意描述有点问题,可以看BZOJ/洛谷讨论. 每个询问有两个限制区间,一是时间限制\([t-d+1,t]\),二是物品限制\([L,R ...
- Python3-大魔王小项目-田忌赛马
本人今天第一次接触项目,花了4小时,不包括学习时间,特此留个纪念 记录一下那些年走过的坑,以资鼓励 英语不怎么好,随缘看看 内容: 类似田忌赛马,三盘两胜,属性人物在一定范围内随机,就这样了 code ...
- vue中使用stylus
1.创建完成一个初始项目后,通过 npm install stylus -D命令,在项目内安装stylus.(注意:命令结尾 -D 即是 --save-dev 的简写形式) 2.需要安装loader, ...
- mvc 路由配置
1.URL模式 路由系统用一组路由来实现它的功能,这些路由共同组成了应用系统URL架构或方案,这种URL架构是应用程序能够识别并能对之做出响应的一组URL,当处理一个输入 请求时,路由系统的工作是将这 ...
- 关于H5的一些杂思细想(一)
作为一名前端程序媛,虽然整天和代码打交道,但是还是有一颗小清新的内心,虽然有时候加起班来不是人,但是空闲的时候还是会整理一下思绪,顺便整理一下自己,两个多月的加班,一直没有更新,今天就把自己最近做的一 ...
- window7环境下ZooKeeper的安装及运行
简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...
- python—文件处理
一.文件处理流程 1.打开文件,得到文件句柄并赋值 2.通过句柄对文件进行操作 3.关闭文件 二.文件打开模式 1.r,只读,默认模式 2.w,只写 3.a,追加 4. r+.w+.x+.a+ ,可读 ...
- 配置 RIPv1 和 RIPv2
拓扑图 场景您是公司的网络管理员.您所管理的小型网络中包含三台路由器,并规划了五个网络.您需要在网络中配置RIP路由协议来实现路由信息的相互传输.最初使用的是RIPv1,后来发现RIPv2更有优势,于 ...
- 动态规划----最长公共子序列(LCS)问题
题目: 求解两个字符串的最长公共子序列.如 AB34C 和 A1BC2 则最长公共子序列为 ABC. 思路分析:可以用dfs深搜,这里使用到了前面没有见到过的双重循环递归.也可以使用动态规划,在建 ...