破窗效应
定义
后来,辛巴杜用锤子把那辆车的玻璃敲了个大洞。 结果呢,仅仅过了几个小时,它就不见了。 以这项实验为基础,政治学家威尔逊和犯罪学家凯琳提出了一个“破窗效应”理论,认为:如果有人打坏了一幢建筑物的窗户玻璃,而这扇窗户又得不到及时的维修,别人就可能受到某些示范性的纵容去打烂更多的窗户。
软件工程
破窗效应其实反应了重构的需求, 而放纵软件中各种乱象, 其最终结果可预测到是软件的熵越来越高.
复制黏贴的例子
class A{
private static Logger log = Logger.getLogger(A.class); //A.class参数复制黏贴容易忘记 (1)
public void method(){
{
//想要使用的东西 (2)
}
dosth();//复制者不清楚该代码是干嘛(3)
}
private void dosth(){
int A="Astring"
}
}
//复制黏贴后
class B{
private static Logger log = Logger.getLogger(A.class); //需修改 (1)
public void method(){
{
//想要使用的东西 (2) 需全删除
}
dosth();
}
private void dosth(){
String str="Bstring"//(3)需修改
}
}
class C{
private static Logger log = Logger.getLogger(A.class); //需修改 (1)
public void method(){
{
//想要使用的东西 (2) 需全删除
}
dosth();
}
private void dosth(){
int A="Astring"//(3)需修改
}
}
复制黏贴了两次之后, 我们发现,这里有两处硬代码, 分别是(1),(3). 注意这时候, A,B,C是具有相同特征, 却没有进行重构,
重复代码数据少
- 通过将类A提取出来父类, B,C,D继承该父类(接口)
- 统一添加方法, 或者修改
Intellij IDEA有该重构的快捷操作
这时候若是找到相同特征, 就应该现在抽象出现. (重点) 即便不知道该抽象叫什么名字
抽象可以使用抽象类(反正JDK7下的就只能使用这个, 从而达到减少重复代码)
重复代码数量多情况 (开始崩坏)
当该类似的代码多了之后, 我们要进行重构就会遇到阻力.
- A,B,C,D….他们在哪个包, 要怎么找到他们. (这里显得有特征 [父类] 和 [接口]的重要性)
- 找到A,B,C,D..要进行一一修改, 这工作量大
接下来, 为什么我觉得这里会容易出现 [破窗效应]?
找到Class A,B,C…是有难度, 所以有的程序员认为, 应该采取碰到该类再修改, 出于以下原因
- 修改了之后不知道是否真没影响, 需要一一检查
- 工作量大, 工程进度要求, 且放下
这样导致的问题
- [疑惑] 新参与项目的员工遇到同一个功能, 有两种或以上写法, 倘若选择了旧的, 将会导致代码[破窗效应] (软件的熵升高)