前言

对于程序员来说,很多时候,我们都在造房子,从学会框架或者是学会构建整个项目之后,慢慢的我们就会觉得自己在做的事情是一种重复劳动,很多时候只不过是换个面孔而已。而更快的造房子,造好看的房子可能是进一步你想要做的。
封装
可能是你要学会的第一步,它能帮你学会造出你需要的合适的工具,而这些工具能帮你更快的造出你想要的房子。

封装的定义

我对封装的定义 ———— 将项目中需要多次使用,或者是重复劳动,或者是复杂且难看的代码,打包在一起(抽离出来)作为一个通用的东西来使用

封装可以是对自己写的代码进行封装,也可以是对别人写的工具或者是框架进行封装,都可以。俗话说的好,写代码就是:要不就是将别人的轮子拿来用,要不就自己造轮子给别人用。别人的轮子不够用,就改装成飞机大炮自己用。

封装的意义

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为例)的更多相关文章

  1. [ES4封装教程]3.使用 Easy Sysprep v4 封装 Windows 7

    (一)安装与备份系统 1.安装 Windows 7 可能很多人会说,安装Win7谁不会,这也用说?装Win7的确人人都会,但如何安装才是最适合系统封装的,就未必是人人都会了.安装是封装之本,没有好的安 ...

  2. 手把手封装数据层之DButil数据库连接的封装

    最近这段时间一直在用SSM框架做增删改查,突然想把以前还不会用框架的时候,综合百度和各种资料结合API文档抄袭而来的数据层的封装分享给大家.这边先封装一个DButil. 我这个封装就是烂大街的那种,没 ...

  3. JDBC连接数据库方法的封装,以及查询数据方法的封装

    (在上一篇文章中,我们详细的介绍了连接数据库的方法,以及eclipse操作数据库信息的相关方法,在这里我们将主要讲封装.) 主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个 ...

  4. [官方教程] [ES4封装教程]2.使用 Easy Sysprep v4 封装 Windows XP

    (一)备份当前操作系统封装的第一步,其实是备份当前安装好的操作系统.避免我们在之后的步骤中出现问题,以至于还要重新安装操作系统,浪费时间精力.系统备份想必大家都会.对于WinXP而言,建议使用Ghos ...

  5. 瞎j8封装第二版之数据层的封装

    看了以前写的代码,对就是下面这个 手把手封装数据层之DataUtil数据库操作的封装 觉得以前写的代码好烂啊!!!,重新理了一下思路,写得更规范和简练,应该效率也会高很多,用了一下下午写的连接池(半废 ...

  6. 试试自行封装AJAX和jQuery中的ajax封装的基本使用

    封装的套路: 1.写一个相对比较完善的用例2.写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体3.根据使用过程中的需求抽象函数 代码记录如下: <script> function ...

  7. 【AngularJS学习笔记】封装一些简单的控件(封装成Html标签)

    bootstrap有强大的指令系统,可以自定义一些属性,基本知识请移步:http://angularjs.cn/A00r  http://www.cnblogs.com/lvdabao/p/33916 ...

  8. Linux组件封装(三)使用面向对象编程封装Thread

    C++11提供了thread,但是过于复杂,我们还是倾向于在项目中编写自己的Thread. Posix Thread的使用这里不再赘述. 重点是这个函数: #include <pthread.h ...

  9. 分享一个Delphi跨平台Http库的封装,一个Delphi跨平台TCP库的封装

    { 单元名:跨平台的TCP客户端库封装 作者:5bug 网站:http://www.5bug.wang } unit uCPTcpClient; interface uses System.Class ...

随机推荐

  1. APM(pixhawk)飞控疑难杂症解决方法汇总(持续更新)

    本文转自下面博主 https://blog.csdn.net/junzixing/article/details/79310159 APM/Pixhawk常用链接汇总(持续更新) https://bl ...

  2. 接口测试——postman & jmeter

    新名词: 自动化测试:写代码帮你测试 接口:是一个抽象的概念,一种交互关系. 抓包:拦截请求. 接口测试:就是功能测试,比后者还简单. 需要有测试文档,包括项目.模块.URL.请求方式.参数.参数说明 ...

  3. 在Github上为项目添加多个用户

    点击项目目录中的Settings 点击Collaborators 添加后,合作者会受到确认邮件,等待合作者确认后,合作者就可以提交了 添加组织 在Settings中找到Organizations 点击 ...

  4. 如何使用$.each()与$().each()以及他们的区别

    1.首先,说下$.each(Arry/Object,function(index,val){ //index表示下标,val表示下标对应的值 }) 下面是使用$.each()的几种类型,其中arr2与 ...

  5. Makefile = ?= := 区别 $@,$^,$<

    = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 1.“=” make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整 ...

  6. over(partition by..) 的运用(转)

    oracle的分析函数over 及开窗函数一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每 ...

  7. extremecomponents

    具体教程: http://www.cnblogs.com/QQParadise/articles/1488920.html 教程中涉及到springmvc的相关知识 下载地址:http://sourc ...

  8. Vs 开发时无法断点问题

    1.清除解决方案 2.重新编译 3.删除项目目录下的obj 和 bin 4.在vs中配置 工具--项目--调试--去除勾选 要求源文件与原始版本完全匹配 关于调试问题 1.关闭诊断工具, 工具 =&g ...

  9. [译文]Domain Driven Design Reference(六)—— 提炼战略设计

    本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章 ...

  10. Daily Pathtracer!安利下不错的Pathtracer学习资料

    0x00 前言 最近看到了我司大网红aras-p(Aras Pranckevičius)的博客开了一个很有趣的新系列<Daily Pathtracer~>,来实现一个简单的ToyPathT ...