首先举个硬编码的例子
对象SomeObject的是这样的:
class SomeObject{ public SomeObject(String name,String value){ this.name=name; this.value=value; } public String name; public String value; } |
注意,我只是为了节省篇幅所以才这么定义SomeObject的name和value!!
我们有这样一个需求,某个方法的需求是,让result等于对象的name的值,如下:
public String printResult(SomeObject object){ String result; result = object.name; return result; } |
后来,由于业务需求的增加,某个name等于”A”的对象,在该方法中result等于value,于是,将上面的这段代码改成了:
public String printResult(SomeObject object){ String result; if(object.name.equals(“A”)){ result = object.value; }else{ result = object.name; } return result; } |
后来,在一个很偶然的机会,我们又出现了另一个name等于“A”的对象,对这个对象,我们需求是result等于name。当换了一个开发人员进行更改这段代码时,很可能出现下面的情况:
public String printResult(SomeObject object){ String result; // if(object.name.equals(“A”)){ // result = object.value; // }else{ result = object.name; // } return result; } |
于是,这个修改测试也成功了,发布上线,线上测试后,很正常,但是,悲剧发生了,这个不解释。
这是硬编码带来的硬伤。
而且硬编码一旦产生,在硬编码上再次硬编码也是不一定不可能。或许上面的程序很可能在一系列的硬编码之后变成下面的情形。
public String printResult(SomeObject object){ String result; if(object.value.equals(“X”)){ if(object.name.equals(“A”) || object.name.equals(“B”)) result = object .value; else result = object .name; }else{ result = object .name; } return result; } |