重构步骤笔记

重构的目的

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

重构的原则

  • 明确每一步的目标
  • 小步走
  • 测试(每一个改动都有可能出现错误)

抽取代码的步骤

  • 新建方法
  • 复制代码
  • 根据代码调整参数和返回值
  • 调整调用位置代码
  • 测试

抽取类的步骤

  • 示意图

抽取主方法

  • 新建类
  • 抽取主方法
    • .h 中定义方法接口,明确该方法是否适合被外部调用
    • .m 中增加方法实现
  • 将主方法复制到新方法中
  • 复制相关的方法
  • 复制相关属性
  • 检查代码的有效性
    • 调整内部变量,让 NSURL 由调用方传递,保证代码的灵活性
  • 复制代理方法,
    • 注释更新 UI 部分的代码
    • 使用 #warning TODO 提醒自己此处有未完成的工作
    • 这样做可以不影响重构的节奏
  • 调整视图控制器 测试重构方法执行
  • 调整视图控制器代码,删除被移走代码
  • 再次测试,确保调整没有失误!

确认接口

  • 确认重构的接口
    • 需要进度回调
    • 需要完成&错误回调
  • 定义类方法,传递回调参数
  • 实现类方法,记录住回调 block
  • 调整调用方法
  • 增加 block 实现
  • 测试
  • 增加已经下载完成的回调
    • 进度回调(100%)
    • 完成回调(路径)
  • 断言
  • 暂停操作
  • 测试,测试,测试!

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

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

  • 示意图

抽取下载管理器

  • 建立单例
  • 接管下载操作
    • 定义接口方法
    • 实现方法
    • 替换方法
    • 测试
  • 操作缓存
  • 暂停实现
  • 最大并发数,NSOperationQueue+NSOperation

block 小结

  • block 是 C 语言的数据结构
  • 是预先准备好的代码,在需要时执行,类似于匿名函数指针
  • 可以被当作参数传递
  • 在需要时,可以对 block 进行扩展
  • 如果当前方法不执行 block,需要使用 属性 记录
  • block 属性需要使用 copy 描述符
  • 对于必须传递的 block 回调,可以使用 断言

results matching ""

    No results matching ""