程式開發記得要有的一個好習慣,就是要記得驗證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
沒有留言:
張貼留言