如何合理封装你的轮子、飞机、大炮(以封装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 ...
随机推荐
- 【转】Mac 删除文件夹里所有的.svn文件
转自: mac 删除文件夹里所有的.svn文件 想要把SVN專案作轉移或複製時 舊的「.svn」真的是很煩人的東西 最快的方式是用終端機輸入 sudo find /Users/justfly/Do ...
- PHP 清除 Excel 导入的数据空格
处理excel中的数据时,遇到了页面中显示为空格,审查元素时却显示为换行,使用replace函数也不管用,反正就是不知道是什么东西,看起来像空格 中文空格这里面有好几种:没有简单的解决问题的方式,比如 ...
- golang 内存模型
1,是什么 是一套规范.内存操作指导 解决多线程编程的 程序的 原子性,有序性,可见性(主要)的问题. 多核操作系统,会存在缓存不一致的情况,说到底是一个同步的问题. 2, 内容 内存模型,除了定义了 ...
- async与defer
<script>元素的几种常见属性: async 异步加载,立即下载,不应妨碍页面其他操作,标记为 async 的异步脚本并不保证按照指定的先后顺序执行,因此异步脚本不应该在加载期间修改 ...
- 旧项目Makefile 迁移CMake的一种方法:include Makefile
有些c++旧项目用Makefile,要迁移CMake的时候非常痛苦,有些像static pattern的语法和make自带命令 cmake要重写一套非常的麻烦. 因此这里用trick的方法实现了一种i ...
- go语言基础之range
在go语言中,遍历数据或切片时可以用range,range会产生两个值,分别是数据的索引与值: package main import "fmt" func main() { x ...
- 读取Excel文件存储在实体类中
1.Maven文件 <!--读取Excel的架包--> <dependency> <groupId>org.apache.poi</groupId> & ...
- 神经网络_线性神经网络 2 (Nerual Network_Linear Nerual Network 2)
1 LMS 学习规则 1.1 LMS学习规则定义 MSE=(1/Q)*Σe2k=(1/Q)*Σ(tk-ak)2,k=1,2,...,Q 式中:Q是训练样本:t(k)是神经元的期望输出:a(k)是神经元 ...
- 欢迎访问我的独立博客 tracefact.net (2019.1.30)
欢迎访问我的独立博客 tracefact.net 长期以来,我都同时维护着两个博客,博客园和 tracefact.net,感觉有点分散精力,所以博客园以后不再每篇文章都同步更新了. 我会挑个别比较好的 ...
- QEMU KVM Libvirt手册(8): 半虚拟化设备virtio
KVM本身并不提供半虚拟化功能,是通过virtio来实现的 The benefits of virtio drivers are of lower overhead and higher perfor ...