我在工作中经常遇到这种情况。为某功能实现了一段代码,然后觉得这段代码或许以后会复用到,于是想尽办法开始复杂的对其进行泛化和完善使其更通用。初衷是为了避免代码重复方便代码维护以通过日后复用提高开发效率。但这样做花费的精力和成本往往都很大,反而极大的降低了开发效率,有些得不尝失。现在越来越怀疑这种为“日后的复用”,究竟是种方便还是种麻烦。今天看到一篇就这个问题做了些讨论的文章个人感觉很受用。
引用:
Brandon Olivares发起了讨论。他说,他刚刚在某些代码上用了30小时的时间,然后觉得这些代码可能会被重用,于是就觉得很矛盾,不知道是不是该把这些代码抽象出来,这样其他项目就有可能也用得到。Brandon想知道其他人都是怎么决定在什么时候抽象代码加以泛化的。
按照我个人理解来看,XP不鼓励假想某些东西可能会被用到,除非确实到了要用那个东西的时间点上。还是我的个人理解,刚才所说的东西也包括提取代码以供日后重用,XP提倡的是到了出现重复的时候再去做重构。
因为这些原因,Ron采取的是这种做法:我只做适当的抽象,够自己用就好。如果我以后在一个稍微不同的环境下还需要用的话,我就会改进抽象。不过除非我的项目目标是给其他项目构建成品,我就不会浪费时间和金钱去给其他项目做东西。
eorge Dinwiddie、Ralph E. Johnson等人推荐到第二次(乃至更晚)用到同样代码的时候再做泛化。Adam Sroka把这个叫做“演化重用”,他认为这种方法比“为重用而设计”效率更高。一名叫做Tim的人发帖说,他这样给业务人员解释:“第一次,你是给编码买单;第二次,你是给重用买单;第三次,它就是免费的了。”
http://www.infoq.com/cn/news/2009/04/agile-code-reuse#view_41326