不願看到Java開發者再做的10件事

鄭瑋發表於2012-12-10

  編者注:Andy是OSI(開發系統整合者)的CEO,同時也是位思想先鋒及優秀部落格作者。

  William F. Buckley.Jr 曾經說過,“保守主義者是那些逆著歷史潮流不斷喊停的人,其他人都不願意這麼做或者對他們這麼做顯得沒有耐性”。雖然我對此瞭解不多,但是每次看到有Java開發人員做以下事情或者我自己被迫做這些事情時,總想跳出來叫停。

  0、遍歷結果集並構造物件

while (result.next()) {
 String name = result.getString(“name”);
 String address = result.getString(“address”);
 String email = result.getString(“email”);
 String phone = result.getString(“phone”);
 stuff.add(new AddressEntry(name,address,email,phone));
 }

  如果你是個時髦的開發者而不是專業人員,顯然你從某篇部落格中讀過有開發者遇到Hibernate的“效能問題”,因而認為ORM都不好,覺得手動編碼“明顯更好”。喜歡的話你當然可以用JDBCTemplate之類,但是謝謝你的對它們的無端指責,我還會繼續用我的JPA/Hibernate。

  1、在交易型系統中寫PL/SQL

  隨著時間推移,你係統中的業務邏輯會被逐步遷移到關聯式資料庫中,所有寶貴的裝置交易都會遷移到資料庫中去。有的人將它們轉換為類似COBOL的處理方式,繫結到呼叫物化檢視的觸發器中。通過他們呼叫其它扁平化版本。簡而言之,很快你會擁有一個極其難以控制的遺留系統。這對Oracle的投資者而言是好事,但對我們則不然。

  2、編寫,除錯甚至真正使用Swing應用程式

  許多年來我一直覺得自己在GUI程式碼方面相當差勁,甚至根本不該去碰前端的東西。Java看起來根本不應該和前端有什麼關聯,Swing效率很低。沒錯,如果你是開發NetBeans的前Sun員工,又不用擔心瀏覽器,而且還有一堆記憶體空間可以盡情使用的話,確實可以寫出很快的Swing程式碼來。否則Swing的確很慢。預設情況下Swing弄出一堆跟原生GUI動畫一樣的圖形介面來,讓人不爽。此外還有Java的沙箱模型。

  3、強制型別轉換

  Java泛型並不完美,甚至不是我所首選的 解決方案,有時總會有些邊界情況使得泛型無法有效處理。例如,我實在不想再這麼做:

  Foo bar = (Foo) FooFactory.get(“bar”);

  不幸的是,總有些庫沒有及時更新,而且遺留程式碼總是存在。我們只好自作自受,乖乖多寫些測試用例、使用 泛型。

  4、用Calendar或Date來做日期計算

  用JDK中的Date和Calendar來做複雜的日期和時間計算簡直就是浪費生命。內建的類僅僅支援最基本的操作,而且一點也不直觀。我們還是用JODA Time這樣的先進庫來代替吧,除非您還在用x86編譯器來寫Web應用,因為除此之外你也享受不到用JDK的Date和Calendar之類帶來的樂趣。

  5、配置會話(Session)複製

  2000年早就過去了,現在所有分散式快取產品和專案都已用NoSQL的鍵值對儲存方式重構過了。如果需要帶狀態的客戶端,那就用AJAX/Javascript好了,把HttpSession丟一邊去吧,這樣的話可以大大提高應用程式的可靠性和可擴充套件性。我們也就不用因為隱藏在深處的一連串異常爆發而半夜起來一路顛簸了。可別誤會了,半夜顛簸挺好的,至少我老婆因此買了輛小貨車(雖然我更喜歡我那輛Ninja 650機車),不過老實說,是時候換成更好、更快、更聰明的東西了。

  6、自己寫排序演算法

  這是最讓人厭惡的,我個人對排序演算法並不留意。寫排序程式碼的人要麼是不知道Java已經提供了你所需的排序演算法(或者自己寫了個排序的第三方庫檔案),要麼根本不知道Comparable和Comparator如何工作。趕緊去補充一下功課,以後再也不要自己寫排序自尋煩惱了。

  7、自己寫連結串列,棧,佇列等

  必須承認,寫個基本的連結串列挺容易。Wikipedia有個關於連結串列的不錯的頁面(http://en.wikipedia.org/wiki/Linked_list),上面有含程式碼的內容,完全可以直接複製貼上,不過何苦要這麼做?也許我是挺懶的,不過我更願意用一個已經通過測試的資料結構,而我也是花過不少功夫才決定這麼做的。

  8、自己寫池,集合或通用的併發程式碼

  認識Doug Lea大師。崇拜大師,那就支援大師的java.util.concurrent包吧。大師可不是凡人,人家可的以高度並行,因此您想得到的併發問題對策,大師也早已想到。

  9、處理日誌框架

  你用什麼詞來形容Commons logging、SLF4J之類?答案是:爛!幾年前Sun不肯簡單地把Log4J的介面引入JDK就導致了這個問題,Oracle倒是可以把java.util.logging做得好點。我寧可大家都用java.util.logging這個爛標準,也不要有人搞出個偉大的其他日誌候選項。這就像有人進行下面的對話:

  “我有可口可樂”

  “喝百事怎麼樣?”

  “管它呢,反正喝了都胖,有什麼區別?”

  英文原文:Andrew C. Oliver

相關文章