【Android Camera2】玩转图像数据
变化阻碍阻碍的特征
变化阻碍的典型特点是当你需要对代码中的某个地方进行修改的时候,你需要在其它许多位置做出相应的许多修改。程序也因此变得更加复杂且难以维护。
变化阻碍阻碍的分类
1 发散式变化(Divergent Change)
1.1 典型特征(Divergent Change)
你发现当你需要对一个类做某个修改时,你要修改类中很多不相关的方法。比如,当你添加一个产品类型的时候,你需要修改负责查询,展示以及下发订单的方法。
1.2 问题产生的原因
通常,这些发散式的代码修改是因为糟糕的代码结构和复制粘贴式的编程所导致的。
1.3 解决方法
●通过提取类法分离类中的这些行为。
●如果不同的类中有相同的行为,你可以通过继承的方法来将它们合并(提取父类法和提取子类法)
1.3 好处
●使代码更具条理性。
●减少重复代码。
●使代码维护更简单。
2 散弹式修改(Shotgun Surgery)
2.1 典型特征
做任何一处修改都需要你在许多不同类中同时修改。
2.2 问题产生的原因
类的单一职责原则在很多类中被破坏。当过分应用发散式变化重构法时可能会导致该问题的出现。
2.3 解决方案
●使用类搬移法和字段搬移法将已经存在的类中的行为放在一个单独的类中。如果没有合适的类适合做这件事,就创造一个新的类。
●如果将代码放到同一个类中导致原来的类几乎变空了,那么可以使用内敛类法来消除掉这个多余的类。
2.4 好处
●使代码更具条理性。
●减少重复代码。
●使代码维护更简单。
3 平行继承体系(Parallel Inheritance Hierarchies)
3.1 典型特征
每当你想要给一个类新建一个子类的时候,你发现你需要为其它的类也创建一个子类。
3.2 问题产生的原因
当这个层次体系规模较小的时候,一切都非常良好。但是随着新的类的增加,修改代码变得越来越难。
3.3 解决方法
你可以分两个步骤去重复平行层次结构。首先,让一个层次结构的实例引用另一个层次结构的实例。然后,通过使用方法搬移法和字段搬移法删除被引用类中的层次结构。
3.4 好处
减少重复代码。
提升代码的条理性。
3.5 何时可以忽略
有时候,平行的类层次结构只是避免程序架构更混乱的一种方法。如果你发现消除重复层次结构的尝试会产生更糟糕的代码,那么就干脆放弃修改,恢复所有更改,并习惯这些代码。