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


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

    目标代码

     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的各种不便。

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

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

  • 相关阅读:
    【转】c#文件操作大全(一)
    Visual Assist安装、破解方法
    web socket多线程实时监听
    SFTP上传下载
    数据库分页代码
    JAVA H5微信分享
    Eclipse中activiti插件的安装
    HTTP请求报文和HTTP响应报文
    CodeVS 1013&1029
    Codeforces 805D/804B
  • 原文地址:https://www.cnblogs.com/ymind/p/2494342.html
Copyright © 2020-2023  润新知