软件开发中的隐喻和名称

      计算机的世界的确精彩纷呈,但又像是一个丰富多彩的大杂烩……有蠕虫,有臭虫,有特洛伊木马,有猪,有象,甚至都有了有动物圆管理员(zookeeper),这些丰富有趣的名字别后都或多或少的与其对应的软件有着本质上的联系。

     隐喻一词是《代码大全》一书中给出的。与其说是隐喻,我更喜欢直接点说是借用概念或者借用模型,感觉说是类比都不为过。

     一个名词对应的物品是随意的,可以把称为苹果的东西叫橘子,只要你喜欢。但是你不会这么做。因为你知道,但你指着苹果说:看,好大个橘子。大家肯定笑话你。因为大家都把这种红彤彤的水果称为苹果,而不是橘子。这种名称和实体的映射关系已经被大家普遍认同了。软件中实现的功能,你也可以随意起个称呼,但是要想让更多人明白你这名称是什么意义,那还是想个绝大多数人认同的称呼吧。

     使用隐喻的最大好处是理解直观。利用大家已经普片认同的概念。软件产品自身本来多是对真实世界的模拟,那么用现实世界的名称也是理所应当的。在软件这儿我们通过使用隐喻,可以让人更加直观的理解,这个软件或者某个模块,甚至是某个函数到底做什么的。

 

      软件世界中有一个我认为最大的隐喻,构建或者说是建造Construction。感觉软件开发中许多概念和方法是参考建筑学上的概念。这点没有考证只是自己的感觉。曾经有人用“写代码”、“培植代码”甚至“系统生长”这类概念来隐喻软件的开发。但都因为不够精准,而被时代抛弃。当前对于“构造软件”应该是认同最多的。

      在代码开发中引入工程方法,应该是因为代码量膨胀,开发人员剧增,大家无法很好的合作,进而导致错误增加,维护困难,所以必须引入工程方法。

      对于软件开发中该如何使用隐喻,首先也是最直观的,就是名称。一个好的名称,让看代码的人,一眼看过去,就能联想到自己已有的概念,进而明白在程序中的意思。比如Pool这个名称,Process Pool,大家一看就可能会联想到:进程小水池。有了这个概念之后,再看看具体的解释,理解这个名称的概念就会容易得多。

      名称可以认为是key,而对应的功能或属性的value。如何让人看到key,大概就能明白这个value是什么?其实很简单,就参照现实世界的名称,通过类比,利用大家普片认同的key和value的映射关系。让其他人看到名称,就知道你这是干嘛的。

      具体来说,对应函数,只需要知道参与的对象,以及做主要什么事,这是做为函数的名称。那么对象或者属性名称该怎么办?直接借用现实世界里面的对应名称或相似的概念。不要自己乱起名字,这样可能会造成概念混乱。比如,ContainerBean是一个很普通的名字,大概意思一看也明白,大概意思就是一堆Bean的集合,但是也可以用SetBean……这个意思可能只用自己明白了,其他人看到一定认为Set这个是个动词,认为是设置Bean的值的意思。

      此外还有就是名称长度,最好15到20字左右,也有人提过25到30字。我感觉都无所谓多长,只要把意思表达清楚就好了,而且一眼看去就知道上面意思了。但千万要注意我看到过超长的函数名。InitializeTheContainerOfContainerBean。虽然一眼看上去也明白什么意思,但还是有些太长了。有个Initialize,其实以及大概了解要做什么了。当时这个名字太长了,主要是后面对象的名字太长。其实如果这样,完全可以省略对象的,通过参数以及返回值都可以明白这个方法的意思。

posted on 2013-11-28 20:14  妄想症1991  阅读(1500)  评论(2编辑  收藏  举报

导航