编写高质量代码改善C#程序的157个建议——建议148:不重复代码
2015-08-24 00:58
411 查看
建议148:不重复代码
如果发现重复的代码,则意味着我们需要整顿一下,在继续前进。
重复的代码让我们的软件行为不一致。举例来说,如果存在两处相同的加密代码。结果在某一天,我们发现加密代码有个小Bug,然后修改了它,却又忘记了角落里的某处存在着一份相同的代码,那么这个Bug就会隐藏起来。
让我们重现这个例子:
在这段代码中,方法PagerEncrypt和AnswerEncrypt使用了相同的加密代码。在实际使用过程中,这两个方法可能不会靠得如此近,它们甚至可能在不同的命名空间下。糟糕的是,重构人员在进行重构的时候,没有发现AnswerEncrypt,于是代码结构变成了:
在开发人员在Encrypt中发现Bug并修正它后,两端原本相同的加密代码变成不同的了。一份值正确的,一份是错误的。而对于这些代码的调用者来说,他看到了类似的方法接口,却没想到其内部实现是完全不一样的。这增加了调用者的排错难度。
所以,对于开发者来说,务必注意不要让代码中出现相同的片段,这不仅是为了代码的整洁,还可以避免更多难以察觉的Bug的出现。
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
如果发现重复的代码,则意味着我们需要整顿一下,在继续前进。
重复的代码让我们的软件行为不一致。举例来说,如果存在两处相同的加密代码。结果在某一天,我们发现加密代码有个小Bug,然后修改了它,却又忘记了角落里的某处存在着一份相同的代码,那么这个Bug就会隐藏起来。
让我们重现这个例子:
void PagerEncrypt() { //加密代码 } void AnswerEncrypt() { //相同的加密代码 }
在这段代码中,方法PagerEncrypt和AnswerEncrypt使用了相同的加密代码。在实际使用过程中,这两个方法可能不会靠得如此近,它们甚至可能在不同的命名空间下。糟糕的是,重构人员在进行重构的时候,没有发现AnswerEncrypt,于是代码结构变成了:
void PagerEncrypt() { Encrypt("密文"); } void AnswerEncrypt() { //相同的加密代码 } string Encrypt(string intput) { string output = string.Empty; //加密代码 return output; }
在开发人员在Encrypt中发现Bug并修正它后,两端原本相同的加密代码变成不同的了。一份值正确的,一份是错误的。而对于这些代码的调用者来说,他看到了类似的方法接口,却没想到其内部实现是完全不一样的。这增加了调用者的排错难度。
所以,对于开发者来说,务必注意不要让代码中出现相同的片段,这不仅是为了代码的整洁,还可以避免更多难以察觉的Bug的出现。
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议147:重构多个相关属性为一个类
- 编写高质量代码改善C#程序的157个建议——建议146:只对外公布必要的操作
- 编写高质量代码改善C#程序的157个建议——建议145:避免过长的方法和过长的类
- 编写高质量代码改善C#程序的157个建议——建议144:一个方法只做一件事
- c# 实现类似skynet的核心库
- c#读取Execl表格数据
- 编写高质量代码改善C#程序的157个建议——建议143:方法抽象级别应在同一层次
- C# String.Format字符串中包含"{" "}"时需注意的问题
- C#使用DirectShow实现简单的视频播放
- 编写高质量代码改善C#程序的157个建议——建议142:总是提供有意义的命名
- 【C#】事务
- c# Socket 开发小记
- C#基础------方法
- C# 之 FTP服务器中文件上传与下载(二)
- 编写高质量代码改善C#程序的157个建议——建议141:不知道该不该用大括号时,就用
- 编写高质量代码改善C#程序的157个建议——建议140:使用默认的访问修饰符
- 编写高质量代码改善C#程序的157个建议——建议139:事件处理器命名采用组合方式
- 编写高质量代码改善C#程序的157个建议——建议138:事件和委托变量使用动词或形容词短语命名
- 编写高质量代码改善C#程序的157个建议——建议137:委托和事件类型应添加上级后缀
- 《iPhone高级编程—使用Mono Touch和.NET/C#》