重构步骤笔记

£可爱£侵袭症+ 提交于 2019-12-07 08:45:33

重构的目的

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

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

重构的原则

  • 明确每一步的目标

  • 小步走

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

抽取代码的步骤

  • 新建方法

  • 复制代码

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

  • 调整调用位置代码

  • 测试

抽取类的步骤

  • 示意图

抽取主方法

  • 新建类

  • 抽取主方法

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

    • 在 .m 中增加方法实现

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

  • 复制相关的方法

  • 复制相关属性

  • 检查代码的有效性

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

  • 复制代理方法,

    • 注释更新 UI 部分的代码

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

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

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

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

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

确认接口

  • 确认重构的接口

    • 需要进度回调

    • 需要完成&错误回调

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

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

  • 调整调用方法

  • 增加 block 实现

  • 测试

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

    • 进度回调(100%)

    • 完成回调(路径)

  • 断言

  • 暂停操作

  • 测试,测试,测试!

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

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

  • 示意图

抽取下载管理器

  • 建立单例

  • 接管下载操作

    • 定义接口方法

    • 实现方法

    • 替换方法

    • 测试

  • 操作缓存

  • 暂停实现

  • 最大并发数,NSOperationQueue+NSOperation

block 小结

  • block 是 C 语言的数据结构

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

  • 可以被当作参数传递

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

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

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

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!