呵呵,不要误会,这里的CVS不是指版本管理的CVS,而是指程序员们最熟悉的三个快捷键:CTRL+C(复制)CTRL+V(转贴)CTRL+S(保存),一个软件产品中的很多代码都是这么得来的,以我们公司产品为例,最典型的莫过于Action的execute方法的前面对session是否过期的判断,以及调用后台的Session Bean的时候的异常处理,以及JSP中的大段类似代码。一旦需求发生变化,这些相关的代码可能都需要修改,我到这个公司的时候就发生过一次这样的事情:一个简单的修改要在百十几个Action中重复进行。
以我这些年的开发经验,我更加倾向于给开发人员提供一个受限的开发环境,可以供选择的接口很少,只有在必要的情况下才增加接口供开发人员使用,共通的功能只能通过共通的接口进行,否则你的工作量可能是使用正确的接口的十几倍。当然,这个开发方式比较适用于产品开发,因为项目的情况差异太大,而且开发周期相对比较短,这样做反倒延缓开发进度,增加成本。
至于如何提供那些接口,就是一个渐进的过程,开始的框架是一个宽泛的接口集,如果一段代码被重复三次,并且以后可能还会重复或者有类似的片断,那么就要马上对原来的代码进行重构,这样在第一个版本出来之前,我们就会得到一个比较好产品。在每个版本的开发前期、中期和后期都做一次代码检查,发现类似这样的代码重复问题并及时修改。