开发中的常见问题
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
一.不定义常量(constant),代码中随意使用数字,并且不加任何注释
症状和例子: 判断"chipType == 2" - 2是什么意思?为什么不定义一个常数 "REALMONEY = 2",然后使用这个常数? 恶劣后果: 旁人不知道该数字什么含义,时间一长包括自己在内都不知道其准确含义。代码重构不可能(无法替换某个常数所有的出现之处、无法稳妥改动数值) 正确做法: 代码中任何常数都必须被定义。不要随手使用数字 二.代码对一些仅用于标识事物种类的数值敏感(not agnostic to number value that represents type information) 症状和例子: 随意指定一些值,以标识一些事物的不同种类。目前常常用来作为客户端与服务器端的协议,各端往往需要对数值的含义作出分析,然后执行相应的动作。此外数值的指定非常随意,无规律、无准则 恶劣后果: 代码完全没有robustness,一个数值的改变即可导致程序出错 正确做法: 对于代表种类信息的数值、或者是代表个体的数值,或者称之为"标识型"数值,程序应该尽量做到对具体数值不敏感。如果数值影响算法,那么应该明确数值生成的规则,有一定规律,而不是两个开发人员私下协议"我给你个1你就应该做什么"(如果需要这样的话,证明是协议需要设计) 三.不使用枚举类型 症状和例子: 用一堆整数来代表一些事物的类别 恶劣后果: 因为不能做到type safe,很容易错误使用而不被检测。如果写代码时cut and paste一些类似的赋值语句,则很容易把完全风马牛不相及的值赋予给变量。此外一堆整数虽然都是为了标识一类物体的不同种,但这种关联无法贯彻。此外定义一堆水果种类与定义一系列交通工具,彼此无本质区别,代码编译时都是整数 正确做法: 在Java中,应该使用Enum枚举类型。在Actionscript中,没有Enum的情况下,可以定义一个类,然后用这个类的实体(instance)作为标识,如: * 定义一个叫Fruit的类 * 构建多个Fruit实体,分别赋予多个全局变量(global、static),每个变量名为某种水果如: APPLE、ORANGE * 把上述对象当作常数使用 四.不支持国际化 症状和例子: 在代码中写死文字信息,比如简体中文 恶劣后果: 网站和客户端都需要i18n支持,一旦代码中到处都是写死的文字信息,非常难改变过来 正确做法: 现代IDE中对国际化、ResourceBundle等的支持已经非常好,需要做的事情就是学会使用 五.所有条件判别代码挤在一个庞大的函数中 症状和例子: 所以if...then或者switch...case语句,把所有情况判断后的处理代码塞在一个地方 恶劣后果: 首先,这种做法让代码阅读、检查不舒服,太长太不好理解;其次,也是最主要的缺陷:完全没有可扩展性。每次多一中情况的发生,就必须去改这个庞大的函数。虽然说改动也许可以只局限于一个函数,但实际上这个函数所在的类(文件)已经被修改,所以严格来说这个类及其一切相关代码都需要被重新测试 正确做法: 使用Command pattern;或者最简单是把对应某个条件的处理代码抽离到独立的类,把这个类更进一步抽象出通用接口。这样每次有新的条件需要处理,我们可以增添新的处理逻辑到新的类里面,然后把这个类通过polymorphism传递给中央处理程序 六.参数写死在代码中 症状和例子: 最常见的问题是把URL写死在代码中,基于当前有限的理解,对系统和商业领域作了很多假设 恶劣后果: 导致代码的兼容性极差,完全没有portability。系统从一个环境挪到另一个环境,问题就会不断出现 正确做法: 细心、不怕麻烦、抽象出可配置的参数,设计时考虑部署和运营的方便 该文章在 2010/8/13 18:24:44 编辑过 |
关键字查询
相关文章
正在查询... |