Spiga

从古城5号到变量命名规范,多一些抽象也许会更好

2011-04-12 16:07 by 梁逸晨, 81 visits, 收藏, 编辑

昨天我走在丽江古城里,路过一家店,当时那条路的名字忘记了,暂且先叫“A路”吧, 而那家店面就叫“A路5号”,它的门牌号确实也是A路的5号。 这么一看就联想到问题了:

1 假如以后搬迁店址

2 假如以后街道改名

还有更多的假如发生的情况,就不一一列举了,只要发生其中一个,那么店名与门牌号就不再匹配了,进一步地,也许隔壁或者对面就变成新的"A路5号"了。

当然这样的事情有很多的解决方案,实际上发生那些事情的可能性也微乎其微。



但是如果把这样的事情放到软件架构设计中,那么出大问题的机率就不容忽视了。例如我现在正在设计windows phone7的一个网络访问模组,一开始我是想把namespace命名为:Kvspas.WindowsPhone7.Net 。 但是后来又去掉“7”,改为Kvspas.WindowsPhone.Net. 因为下一代WindowsPhone也一样需要使用它,那时候“7”这个数字就不适合了(街道改名了)。再后来,WindowsPhone这个词汇还是不合适,因为同属于SilverLight与XNA架构的浏览器SilverLight和桌面脱机SilverLight中也需要使用它,于是又改为了Kvspas.SmartDevice.Net。看似可以了,最后还是觉得有些地方不对,SmartDevice 表示智能设备,泛指手机、平板电脑等随身携带的设备,与通用型windows系统还是相差甚远的。 最终,选用了SmartClient 这个词:Kvspas.SmartClient.Net 。取智能客户端之意,Client一词可指硬件,也可指软件,而Device却只能表示硬件。

严谨的命名法在整个软件架构中相当重要,直接关系到开发者自己在三个月后还能不能明白当初开发的这个模块是干什么用的。一款可用性产品包含很多很多的模组,胡乱命名只能够带来“破窗户效应”。 14年前,16系统开始升级到32位系统的时候,当时的工程师把系统盘中那个文件夹取名为System32,“32”一词就是典型的错误例子(在语义上绑定了CPU架构,其实没必要)。今天不得不用一个新的SysWOW64文件夹来区分64位系统的主文件。以及Program Files(x86)区分32位程序集。



进一步说,我们平时新建一个文件夹,无论保存什么东西,都不应该使用它默认的“新建文件夹(1)”、“新建文件夹(2)”这样的名称。一旦这样的文件夹多了,自己的很多文件就再难以维护整理了。