代码细节重构:请对我的代码指手划脚(三)

“请对我的代码指手划脚”是我们群内搞的一个不定期的常规性活动,以代码审阅和细节重构为主线,大家可以自由发表自己的意见和建议,也算得上是一种思维风暴。感觉到这个活动很有意义,有必要总结并记录下来。

目标代码

 1 public static string _ComputeFileMD5Hash(string file) { return _ComputeMD5Hash(_OpenFile(file)); }
 2 
 3 private static byte[] _OpenFile(string file)
 4 {
 5     FileStream input = null;
 6     BinaryReader reader = null;
 7     byte[] buffer = null;
 8 
 9     try
10     {
11         input = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
12         reader = new BinaryReader(input);
13     }
14     catch (Exception)
15     {
16         reader = null;
17     }
18     finally
19     {
20         if (reader != null)
21         {
22             buffer = reader.ReadBytes((int)input.Length);
23             reader.Close();
24         }
25     }
26 
27     return buffer;
28 }

重构建议

这段代码是来自于一个真实的exe的反编译结果。我发布到社区里面之后,目前为止没有人能够给出我期望的看法或建议。

实际上,这段代码的问题并不是语法或编码风格或者异常处理这些。老手应该能够很快的意识到这段代码的真实意图——读取文件的字节数组并返回这个字节数组的MD5哈希值。

然而,在读取文件的字节数组的时候,作者自己编写了一个“byte[] _OpenFile(string file)”方法。表面上看很好、很强大,作者真的是用心良苦,在读取文件的字节数组上是煞费苦心。

可老陈要说“byte[] _OpenFile(string file)”方法根本就没有存在的必要!如果您想持反对意见,请先阅读以下链接:http://msdn.microsoft.com/zh-cn/library/3k7ax020(v=vs.100).aspx

有人说.NET猴子都是脑残,因为.NET框架封装了太多的东西,这些猴子们对底层的认识就比较差。可反过来说,在能够增强生产力的前提下,让一部分人少一些对内部实现的理解是可以容忍的,只要他能够用好我们提供的框架就是好猴子!

反击意见是,其实很多Java猴子都无法忍受Java语言自身的某些逻辑,为什么Java猴子总是在鼓吹他们有各种开源项目、框架可以用呢?其实他们也想偷点儿懒,有更加方便的为什么还要自己写呢?回头想想吧,为什么会出现基于JVM的诸如Scala等各种新的语言呢?具有讽刺意义的是,Java的泛型设计者也正是Scala的作者。之所以Scala会诞生,就是因为他老人家无法忍受Java的各种不便。

筒子们,你认真阅读如上链接了吗?你对平台之争持什么意见?你对技术发展持什么意见?你对自己的代码有信心吗?你能对自己写出的每一行代码负责吗?

这里,我不贴自己的重构结果,有兴趣的可以在点评里回复。

posted @ 2012-05-10 14:53 O.C 阅读(...) 评论(...) 编辑 收藏