重构代码设计精要

简介: 重构代码设计精要
  1. extract method 提炼方法 (110)

    将代码放进一个独立函数中,并让函数名称解释该函数的用途

  2. pull up field 字段上移 (332)

    两个子类拥有相同的字段,将该字段移动到超类。

  3. extract class 提炼类(149)

    某个类做了应有两个类做的事,建立一个新类,将相关字段和函数从旧类搬到心类。

  4. move method 搬移函数

    程序中,有个函数与其所驻类之外的另一个类进行更过交流,调用后者,或被后者调用,在该函数最常引用的类中建立一个新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。

  5. encapsulate field 封装字段

    将其声明为private,并提供相应的访问函数。安全问题,如果不封装其他地方修改对象中的属性,该对象的使用者并不知情。

  6. move field 搬移字段

    与4相同意思。

  7. duplicated code 重复代码 (76)
  8. form template method 塑造模板函数 (345)

    你有一些子类,其中相应的某些函数,以相同的顺序执行类似的操作,但各个操作的细节上有所不同。

    将这些操作分别放进独立函数中,并保持他们都有相同的签名。于是原函数也变得相同了,将原函数上移到超类。

    调用的时候调用超类中的原函数,通过多态指定调用的子类。

    设计模式中的Template method 注重顺序。(我现在做的项目中edi导出报文使用的就是模板方法模式)

  9. substitute Algorithm 替换算法 (139)

    将函数本体替换为另一个算法(注意if判断固定几个值时,可以把固定的几个值放入集合中 139)

  10. replace temp with query 以查询取代临时变量 (120)

    你的程序以一个临时变量保存某一表达式的运算结果,将这个表达式提炼到一个独立函数,将这个临时变量的所有引用点替换为对新函数的调用,此后,新函数就可以被其他函数调用。

  1. split temporary variable 分解临时变量

    你的程序某个临时变量被幅值超过一次,他即不是循环变量,也不被用于收集计算结果,针对每一次赋值,创造一个对立的,对应的临时变量(final)

  2. Intriduce paramter object 引入参数对象( 295)

    某些参数总是很自然的同时出现,以一个对象取代这些参数。(如startDate,endDate)

  3. preserve whole object 保持对象完整 (288)

    你从某个对象取出若干值,将他们作为某一次函数调用时的参数,改为传递整个对象。

  4. replace method with method object 以函数对象取代函数 (135)

    你有一个大型函数,其中对局部变量的使用使你无法采用提炼函数,将这个函数放进一个单独对象中,如此以来局部变量就变成了对象中的一个字段,然后你可以在同一个对象中将大型函数分解成多个小型函数。

  1. decompose conditional 分解条件表达式 (238)

    有一个复杂的条件表达式语句,从 if then else 三个段落中分别提炼独立函数。(每一个等号都有其特定意义,通过函数名称标注)

  1. extract interfact 提炼接口 (341)

    若干客户使用类接口中的同一子集,或者两个类的接口有部门相同,将相同的子集提炼到一个独立接口中。(接口弥补了继承,通用也可以通过继承的方式理解接口类与实现类)

  1. Long parameter list 过长参数列

    太长参数类导致难以理解。太多参数会造成前后不一致,不易使用,而且一旦你需要更多数据,旧不得不修改他。

  2. inline class 将类内联化 (154)

    某各类没有做太多事情,将这个类所有特性搬移到另一个类中,然后移除原类。与提炼类相反。

相关文章
|
网络协议 Linux
Linux DNS服务详解——DNS主从架构配置
Linux DNS服务详解——DNS主从架构配置
799 4
|
数据采集 移动开发 文字识别
服务阿里 9 个APP|揭秘新奥创升级的质量演变
新奥创技术体系,是手机淘宝端搭载着星环中台的整个商业化研发体系,孵化出的面对无线电商领域的技术体系。过去一年在手淘完成了下单、详情、购物车三大业务域的改造,接下来还会在订单、手淘导购等领域进行技术升级。目前新奥创已经接入阿里内的9个 App,逐步成为阿里集团无线领域电商系的技术解决方案。 本文主要围绕新奥创技术体系的升级,剖析架构升级对测试保障带来的新的转变,也是新的机遇。
5613 0
服务阿里 9 个APP|揭秘新奥创升级的质量演变
通过 ansible 创建 openstack 虚拟机并部署应用(实战篇)
前文 通过 ansible 创建 openstack 虚拟机并部署应用(配置篇) 接下来我们实战一下。 目录结构 ── ansible.cfg├── group_vars│ ├── all.yml├── openstack.
5837 0
|
机器学习/深度学习 自然语言处理 算法
【从零开始学习深度学习】49.Pytorch_NLP项目实战:文本情感分类---使用循环神经网络RNN
【从零开始学习深度学习】49.Pytorch_NLP项目实战:文本情感分类---使用循环神经网络RNN
|
测试技术 API 开发者
精通.NET单元测试:MSTest、xUnit、NUnit全面解析
【10月更文挑战第15天】本文介绍了.NET生态系统中最流行的三种单元测试框架:MSTest、xUnit和NUnit。通过示例代码展示了每种框架的基本用法和特点,帮助开发者根据项目需求和个人偏好选择合适的测试工具。
480 3
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
192 2
|
机器学习/深度学习 数据采集 自然语言处理
【热门话题】常见分类算法解析
本文介绍了6种常见分类算法:逻辑回归、朴素贝叶斯、决策树、支持向量机、K近邻和神经网络。逻辑回归适用于线性问题,朴素贝叶斯在高维稀疏数据中有效,决策树适合规则性任务,SVM擅长小样本非线性问题,KNN对大规模数据效率低,神经网络能处理复杂任务。选择算法时需考虑数据特性、任务需求和计算资源。
463 0
|
自然语言处理 Java 编译器
你知道C语言吗?
了解C语言是什么,以及代码是怎么跑起来的,初学者必看
|
XML 前端开发 数据格式
selenium-CSS与XPATH常用元素定位方法
selenium-CSS与XPATH常用元素定位方法
756 0
|
测试技术
Appium自动化测试swipe滑动封装
Appium自动化测试swipe滑动封装
214 0