2009年2月19日星期四

天山童姥与大蝌蚪

金庸小说《天龙八部》中有一个奇怪的女人,名叫天山童姥。之所以说她奇怪,并不是因为她武功高强性格变态,而是因为她身材永如女童。这并不是一篇讲萝莉的文章,如果你是对那个话题有兴趣再读下去可能会浪费你宝贵的时间。
因为我又要扯到软件设计上来了。
我奇怪的是,当她练到更多的武功,需要更多的feature的时候,这个老萝莉却停止了架构的变化。比方说蝌蚪吧,长成那个样子是为了适应当前的需求——在水中生活。当需求发生变化,需要新的feature时,蝌蚪逐渐的发生了架构上的变化——变成了青蛙——两栖动物。设想蝌蚪仍用原来的架构来应对增加的新需求,像个鼻涕虫一样趴在荷叶上可能没问题,想跳起来就有难度了。
软件当时的架构往往是为了支撑当时的需求的,当不断有新的需求增加进来时架构要随之调整。可是我们的软件模块有时就像老萝莉或者大蝌蚪一样,用一成不变的架构,笨拙的应付着新的功能。
有点意思的是,我很久以前曾经工作过的一个软件模块,是在更早以前用一个当时著名的芬兰美女的名字命名的,她那年20岁。十六年过去了,当年的美女依然美丽动人,而且有了洽当耦合的结果——已是孩子她妈了,相夫教女,非常美满。而那个模块如今却已是臃肿不堪了。早就违反了Single  Responsibility Principle,并且不断的违反着Open/Closed Principle,十六年间和无数其它模块发生了理也理不清的耦合关系。不知道是不是该把美女的名字还给人家,改名叫做天山童姥的好。
Craig Larman对我的大蝌蚪的比喻提出了批评(我当然没办法把天山童姥的事和他说,说了他也不懂)。他说蝌蚪是要注定变成青蛙的,但软件需求的变化却是不可预知的。他更喜欢园丁的比喻——园中的植物不断的生长,就像系统不断的成长一样。园丁们要不断的修剪,不能让花园变成杂乱的荒园。他说,这个比喻将会出现在他的下一本书中。

附上美女的照片,名字就不提了。为了强调本文的重点,把那个模块描写的比较不堪。其实和事实相比有很大的夸大成份。并且一直一来围绕这个模块工作的同仁们都很努力,让我多多少少有点心里不安。



没有评论:

发表评论