代碼細節重構:請對我的代碼指手划腳(三)


“請對我的代碼指手划腳”是我們群內搞的一個不定期的常規性活動,以代碼審閱和細節重構為主線,大家可以自由發表自己的意見和建議,也算得上是一種思維風暴。感覺到這個活動很有意義,有必要總結並記錄下來。

目標代碼

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

筒子們,你認真閱讀如上鏈接了嗎?你對平台之爭持什么意見?你對技術發展持什么意見?你對自己的代碼有信心嗎?你能對自己寫出的每一行代碼負責嗎?

這里,我不貼自己的重構結果,有興趣的可以在點評里回復。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM