31天重构汇总

 一般重构
  • 封装集合(如果只需要给调用者提供查询数据的功能,使用IEnumerable 而不是IList 集合类型)因为IEnumerable 只有 数据的遍历功能,而IList 具有对集合的所有操作功能
  • 重命名(改名(方法,类,参数)是指在写代码的时候对类、方法、参数、委托、事件等等元素取一个有意义的名称。)
  • 封装条件(指条件关系比较复杂时,这时我们应当根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或者方法,如果条件表达式不需要参数则可以提取成属性,如果条件表达式需要参数则可以提取成方法。)
  • 使用条件判断代替异常(是指把没有必要使用异常做判断的条件尽量改为条件判断)
  • 分解复杂判断(是指把原来复杂的条件判断等语句用尽快返回等方式简化代码。)
  • 避免双重否定(是指把代码中的双重否定语句修改成简单的肯定语句,这样即让代码可读,同时也给维护带来了方便。)
  • 尽快返回(指把原来复杂的条件判断等语句用尽快返回的方式简化代码。)
方法、字段重构
  • 移动方法(把方法放在合适的类中)(例如:公共类。)
  • 提升方法(把一个很多继承类都要用到的方法提升到基类中去)
  • 提升字段(把子类公用的字段提升到基类中,从而达到公用的目的)
  • 降低方法(和3相反,把只有个别子类会使用到的方法从基类中移动到对应的子类中去)
  • 降低字段(把基类中只有某些少数类用到的字段降低到使用它们的子类中)
  • 提取方法(把某些计算复杂的过程按照功能提取各个小方法)
  • 分解方法(是指把我们所做的这个功能不停的分解方法,直到将一个大方法分解为名字有意义且可读性更好的若干个小方法)
  • 提取方法对象-- 按照语义(不同的职责)对象进行隔离封装。便于精确类的职责,控制类的粒度。
  • 为布尔方法命名(是指如果一个方法带有大量的bool 参数时,可以根据bool 参数的数量,提取出若干个独立的方法来简化参数。)
  • 引入参数对象(是指当一个方法的参数过多或者过为复杂时,可以考虑把这些参数封装成一个单独的类)
  • 移除重复内容(把一些很多地方都用到的逻辑提炼出来,然后提供给调用者统一调用)
类、接口重构
  • 用委派代替继承(根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替)[当一个类依赖于另外一个类的方法时,构建两个类的关系的方式有两种:继承(强关联的关系)和委派(弱关联的关系)]
  • 提取接口(当超过一个的类要使用某一个类中的部分方法时,就因该解开他们之间的依赖,让调用者使用接口) --多态
  • 分离职责(指当一个类有许多职责时,将部分职责分离到独立的类中)
  • 提取父类(指类中有一些字段或方法,你想把它们提取到父类中以便同一继承层次的其它类也可以访问他们)
  • 提取子类(是指把基类中的一些不是所有子类都需要访问的方法调整到子类中。)
  • 合并继承(是指如果子类的属性和方法也适合于基类,那么就可以移除子类,从而减少依赖关系。)
  • 去除上帝类(是指把一个看似功能很强且很难维护的类,按照职责把自己的属性或方法分派到各自的类中或分解成功能明确的类,从而去掉上帝类。)
  • 去除中间人对象(是指把 在中间关联而不起任何其他作用的类移除,让有关系的两个类直接进行交互。)
  • 使用多态代替条件判断(是指如果你需要检查对象的类型或者根据类型执行一些操作时,一种很好的办法就是将算法封装到类中,并利用多态性进行抽象调用。)
  • 分解依赖 (对部分不满足我们需求的类和方法进行分解(例如我们写单元测试只想测试功能本身,而不想测试他们依赖的代码)在目标代码和需要被忽略的代码之间加一层进行隔离
设计模式
  • 使用策略类(使用策略模式替换原来的switch……case 和 if ……else)
  • 提取工厂类(指如果要创建的对象很多,一种很好的方法就是提取工厂类)
  • 引入契约式设计(是指我们应该对应该对输入和输出进行验证,以确保系统不会出现我们所想象不到的异常和得不到我们想要的结果。)
參考資料:
 
 
 
谢谢博客,方便自己也方便有需要的人~

posted @ 2022-02-24 15:05  会编程的厨子  阅读(32)  评论(0编辑  收藏  举报