文档章节

重构步骤笔记

就不穿小内
 就不穿小内
发布于 2015/12/26 16:17
字数 615
阅读 38
收藏 2

重构的目的

  • 相同的代码不要出现两次

  • 相同功能的代码可以及时抽取,以备日后复用,不要重复创建轮子

重构的原则

  • 明确每一步的目标

  • 小步走

  • 测试(每一个改动都有可能出现错误)

抽取代码的步骤

  • 新建方法

  • 复制代码

  • 根据代码调整参数和返回值

  • 调整调用位置代码

  • 测试

抽取类的步骤

  • 示意图

抽取主方法

  • 新建类

  • 抽取主方法

    • 在 .h 中定义方法接口,明确该方法是否适合被外部调用

    • 在 .m 中增加方法实现

  • 将主方法复制到新方法中

  • 复制相关的方法

  • 复制相关属性

  • 检查代码的有效性

    • 调整内部变量,让 NSURL 由调用方传递,保证代码的灵活性

  • 复制代理方法,

    • 注释更新 UI 部分的代码

    • 使用 #warning TODO 提醒自己此处有未完成的工作

    • 这样做可以不影响重构的节奏

  • 调整视图控制器 测试重构方法执行

  • 调整视图控制器代码,删除被移走代码

  • 再次测试,确保调整没有失误!

确认接口

  • 确认重构的接口

    • 需要进度回调

    • 需要完成&错误回调

  • 定义类方法,传递回调参数

  • 实现类方法,记录住回调 block

  • 调整调用方法

  • 增加 block 实现

  • 测试

  • 增加已经下载完成的回调

    • 进度回调(100%)

    • 完成回调(路径)

  • 断言

  • 暂停操作

  • 测试,测试,测试!

新问题:如果连续点击,会重复下载,造成错乱!

解决办法:建立一个下载管理器的单例,负责所有的文件下载,以及下载操作的缓存!

  • 示意图

抽取下载管理器

  • 建立单例

  • 接管下载操作

    • 定义接口方法

    • 实现方法

    • 替换方法

    • 测试

  • 操作缓存

  • 暂停实现

  • 最大并发数,NSOperationQueue+NSOperation

block 小结

  • block 是 C 语言的数据结构

  • 是预先准备好的代码,在需要时执行,类似于匿名函数指针

  • 可以被当作参数传递

  • 在需要时,可以对 block 进行扩展

  • 如果当前方法不执行 block,需要使用 属性 记录

  • block 属性需要使用 copy 描述符

  • 对于必须传递的 block 回调,可以使用 断言


© 著作权归作者所有

上一篇: GET & POST
就不穿小内
粉丝 4
博文 59
码字总数 32988
作品 0
海淀
私信 提问
重构_改善既有代码的设计(五)

1、重构的记录格式 介绍重构时,我采用一种标准格式。每个重构手法都有如下五个部分。 (1)首先是名称。建造一个重构词汇表,名称是很重要的。这个名称也就是我将在本书其他地方使用的名称。...

OliverC
2014/05/05
0
0
31天重构学习笔记下载

前言 前两天写了一篇程序猿也爱学英语(上),有图有真相的文章,写作那篇文章只是自己一时兴起,或者说是自己的兴趣使然。文中的观点只是自己的学习心得和体会,属一家之言且鉴于本人不是学...

KnightsWarrior
2013/08/01
0
0
31 天重构学习笔记2. 移动方法

摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过...

技术小甜
2017/11/15
0
0
31 天重构学习笔记9. 提取接口

摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过...

技术小甜
2017/11/08
0
0
31 天重构学习笔记7. 改名(方法,类,参数)

摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过...

技术小甜
2017/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

axios 使用步骤很简单,首先在前端项目中,引入 axios:

  前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议使用 vue-resources ,这个项目本身也停止维护,目前建...

SEOwhywhy
40分钟前
5
0
c++ 创建对象的三种方法

c++有三种方法创建对象 结合代码来看 1 #include <iostream> 2 using namespace std; 3 class Test { 4 5 private: 6 public: 7 add() 8 { 9 ......

天王盖地虎626
55分钟前
1
0
ant 中的fileset include等拷贝

拷贝一个目录到指定目录下 例:<copy todir="${basedir}/new"> <fileset dir="${basedir}/old"> <include name="appgen" /> <include name="appgen/" /> <include name=appgen/**" /> <incl......

shzwork
今天
2
0
react-jianshu项目的创建

创建项目 1、github上创建仓库react-jianshu 2、将项目克隆到本地git clone git@github.com:startjcu/react-jianshu.git 3、在当前目录(项目目录的上级目录)下执行create-react-app react-...

星闪海洋
今天
2
0
OSChina 周二乱弹 —— 小哥哥,你可以教我写代码吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @nnnm: 生活大爆炸,结束了,这部陪伴了漫长时间的情景喜剧,最终是以诺贝尔奖和大团圆收尾的。虽然,不算精彩,但也是温馨。而少年谢尔顿的...

小小编辑
今天
1K
14

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部