我们经常认为,应该不要重复发明轮子。所以尽量把代码写的模块化,以便于将来复用。但是,现实生活中,我们还是大量的重复开发着。这是为什么呢?
1. 有时候学习成本大于开发成本。比如我需要一个功能,我发现如果我开发一个给我自己用的模块,需要2天,但是学习一个模块,可能需要1天,然后考虑到将来调BUG的不便,可能大于开发成本。最后我决定自己开发。
2. 有时候发现性能不行。模块的设计大概为了适应各种需求,做了很多的配置项,结果性能下降了,或者需要深入理解才能知道如何配置出好的性能。于是,要么性能不好,要么花大量的时间弄明白所有的配置,有这个时间,不如自己开发一个只满足我的需求的针对性的模块。
3. 有时候模块的小小缺陷让人发狂。模块当初的设计没有考虑到我的项目的需求,就差一两个功能不能实现,于是我的项目很难用模块直接实现,如果我想要继续用这个模块,就得写很多很莫名其妙的代码。比如用APS.NET的GridView的时候,想弄一个什么特别的效果,不知道怎么用GridView实现,翻阅了大量MSDN文档,再花了不少时间去Google以后,没找到解决方案,只好从头做起,放弃GridView,或者终于找到一个所谓的解决方案,写下很多莫名其妙的代码. (题外话,人生最痛苦的事情莫过于,你终于把GridView的各种配置搞得一清二楚,还学会了各种特殊的办法来做特殊的效果,但是新版的GridView做了大量的改动,以前的各种经验都不管用了)
或许还有别的原因,这三个应该是最主要的。
怎么办呢,我们应该只考虑复用那些经过长时间的使用,且很稳定的模块。绝不轻易改用别的模块。