等你无法重构的时候再考虑重写我 带过很多优秀的程序员,也与很多优秀的程序员共事过。有一大部分的程序员在看到一套系统不是那么满意,或者存在某些明显的问题,就总是忍不住要把整套系统 按自己觉得可以优化的方向来重写,结果,重写结构往往并不令人满意。系统中确实存在很多不合理的地方,但是有不少的这种代码,恰恰是为了解决一些特定场景 下的问题的。也就是说,所有的规范以及编程的原则,其实也是有条件限制的,他可能在大部分的时候是正确的,能够指导你完成你的任务,但是,并不是在所有地 方都是适用的。比如数据库范式,但实际中我们的设计往往会考虑冗余,这是违背范式的,但是为什么还有那么多人趋之若鹜呢?因为我们可能需要用空间换时间。 如果我们一开始就考虑重写,那么你可能会陷入以下的困境:
我举个例子,说明如何通过重构更好的利用现有代码的。 我有一个非常庞大的系统,其中有一块功能是用于数据采集、存储、告警管理以及电话、短信等告警通知。大致的结构如下: class MainEngine:IEngine{
public MainEngine(ConfigSettings config){
}
public void Start();
public void Stop();
}
需要增加新的业务功能时,程序员写的代码往往是这样的:首先时修改配置类 class ConfigSettings{
public bool NewFuncEnable{get;private set;}
public ConfigSettings(){
NewFuncEnable=xx;//从配置文件读取
}
}
接着修改主程序: class MainEngine:IEngine{
private NewFuncClass newCls=new NewFuncClass();
public MainEngine(ConfigSettings config){
}
public void Start(){
if(config.NewFuncEnable)
newCls.Start();
}
public void Stop(){
if(config.NewFuncEnable)
newCls.Stop();
}
}
在修改的过程中,往往是根据配置文件来判断新功能是否启用。上面代码会造成什么问题呢:
|