程序像是“独生子女”
吴旻
泰岩网络工作室
我自己的小孩就是独生子女,所以在这里我没有说独生子女如何如何不好的意思。
最近接手的几个程序都发现原来的程序员使用了大量的“单实例模式”。单实例模式的本意是说程序中如果有多个,那是不允许的;而我接手的程序中,之所以这么做,完全是因为当时的程序员觉得有一个就够了,而不是不能有多个。相反,当我觉得如果有多个实例,程序的安全性和架构会更好一些时,我失去了快速重构的可能。我必须将遍布于整个程序中是单实例分离出来,将程序模块间的耦合打开,才可能做更进一步的重构。
一个单实例和一个独生子女有些太像了,总之是不能再有第二个。其实不是不能有第二个,而是原来的程序会“想尽一切办法”阻止我使用第二个,让我必须按照只能有一个的思路来。这就像政治上一旦对某个事件定了性,想尽快修改,可就是难上加难了。讲实话,原来的程序根本没有打算阻止我使用第二个,但他随意使用单实例,客观上造成的结果是我只能按他原来的思路来,要不然就困难重重。相当于说:改革是可以的,代价是惨重的。
不改,是没有出路的,改,代价又是惨重的!这就是现状。
我有点不太理解为什么这种程序的适应性会这么差。或许是最初的程序员没能理解程序作为整个系统的一部分,是会遇到其它接口的瓶颈的。比如,网络传输需要时间,磁盘读写需要时间,数据库查询需要时间。总而言之,原来的程序员觉得这个程序是最重要的,所有的其它部分都是配合它而且不需要时间的,如果其它部分不能配合,那就是其它部分的问题了。如果眼下性能出现问题,那调整其它部分的代价是高的,但修改这部分程序的代价一定是最高的!
其实多数独生子女不会觉得自己在家中是最重要的,但是他们会意识到别人拿他们是没有办法的。他们只要既成事实,家长就会因代价的选择而不得不默认什么。我接手的程序,大意也是如此。
希望以后能少接一些这样的程序。