2012年12月22日 星期六

Argument Validation ? 有請 Google Guava 和 Apache Commons







程式開發記得要有的一個好習慣,就是要記得驗證method所傳進來的參數,因為並不是所有使用者都會乖乖看API文件,很多使用者是看到參數就亂傳一通,看看到底會發生什麼事,所以一個好的Method 設計記得要寫參數驗證,範例如下:

public int doSomeCalculation(int value)
{
    if (value < 0)
    {
         throw new IllegalArgumentException("negative value");
    }
...
}



但是一旦要驗證的參數一多,一直都在寫這些驗證的東西,就會覺得很煩,這時候請出一些util library就可以節省許多時間,寫成下面這樣多簡潔啊:

Validate.isTrue(value >= 0, "negative value");
或是
checkArgument(value >= 0, "negative value");


而我腦袋中馬上浮現兩套 Util Library,一個是 Apache Commons 另一個是 Google Guava,根據快思慢想裡面所提到的系統一,我下意識就覺得Google Guava比較新也比較威,Apache Commons又老又舊....(這是啥刻板印象)

對於這種比較Lib效能的我向來就是直接請出Goolge 大神,自己做太麻煩又不一定準 (真沒實驗精神),於是我就找到這篇文章 Google Guava vs Apache Commons for Argument Validation,直接引用那篇blog的結論,這兩套Lib沒有輸贏只有在適當的時候選擇適合的來用

Apache Commons Validate


  • 適合JDK5 以前的舊版本
  • 不用 static imports 就有比較好的閱讀性 (例:Validate.isTrue() 很直觀)
  • 有 Collection 和 array 的驗證功能 (例:Validate.notEmpty(Collection collection))

Google Guava Preconditions


  • 有額外的 exception 類別可以使用
  • 對於訊息類型的參數處理比較方便 
  • 驗證玩後是直接回傳值的,方便直接assign





張貼留言