关于代码重用
代码重用真是程序员的一个终极理想(不过当世界上所有需要的代码都写出来的时候,还要程序员干什么呢?),但是很多人都理解错了代码重用的含义,代码重用不是毫无理由的用原有的可以工作的老代码(虽然用起来不一定舒服),而是在做设计的时候,要考虑到代码的可扩充性、可理解性、可维护性。同样,在重用老代码的时候也要评估原来代码的质量,如果原来代码不能满足或者不能很好的满足现在的目标,那么要么进行代码的重构,要不重新写一套。尤其是第一版的程序,架构很难做到一劳永逸,第二版就应该无情的抛弃第一版的代码。
如果第一版的代码已经作为API导出了怎么办?导出意味着别人已经在使用你的代码了,那 么轻易的改接口也是不负责任的。解决的办法很简单,维护两套接口,改写老的代码,使 之调用新的代码,并标记老的API为deprecated。举个例子:
version 1:
public class A {
public int f() { ... }
}
public class C {
public void f(A a);
}
version 2:
public class B {
public int f() { ... }
}
/**
* @deprecated use B
*/
public class A {
B b = new B();
/**
* @deprecated use B.f()
*/
public int f() {
//delegate to B.f()
return b.f();
}
}
public class C {
/**
* @deprecated use C.f(B b)
*/
public void f(A a) { ... }
public void f(B b) { ... }
}
代码不是什么好东西,别把它当作宝贝,也不是你的孩子(有人就这么说),该抛弃时不要惋惜,里面的设计思想才是精华所在。
--
今天在公司上班,接手一个项目。我想重新设计原来的一部分class。原来的东西本来就很少,也是在很匆忙的情况下设计出来的,有很多不完善的地方。项目负责人却一定要我用原来的代码,感觉很是不爽,故有感而发 :-)