工具類是編程過程中最常用的類,除功能性外它主要實現代碼復用,這一方面極大降低使用門檻,另一方面通過收斂提高規范性和通用性,進而提高可擴展性和可維護性,從而大幅提升開發效率。
以往當我們需要一個工具類或工具類方法時,大部分時候搜到的都是低質量的碎片化的代碼,這些代碼如果不加任何控制地被隨意引入到工程里,慢慢就會變成屎山代碼,輕則影響代碼的可閱讀性和美感,重則造成不可預計的Bug并極大影響可維護性。
所以這要求我們在添加工具類和方法時必須放眼全局和未來,慎之又慎。
可擴展性:系統為了應對需求的變化而提供的一種應變能力,一般針對新功能。
可維護性:糾正系統錯誤或缺陷和進行系統優化或升級的難易程度,一般針對已有功能。
根據工具類的特征,將其分為以下兩類:
- 框架工具類,狹義的工具類,極少的依賴,高度可復用,比如:日期工具類、字符串工具類、Bean工具類。
- 平臺工具類,自定義的工具類,依賴框架的某個能力,一般不可跨研發平臺復用,比如:權限工具類,人員工具類、消息工具類。
- 私有工具類,自定義的工具類,依賴某個具體場景,一般不可跨應用或服務復用,比如:項目工具類,日志工具類。
我理解的好的框架工具類應該具備以下特征:
- 恰到好處的命名,約定大于定義
- 最少的依賴,保證普適性
- 可選的依賴,保證兼容性
- 最低的侵入,保證靈活性
- 避免大而全的方法入參(DTO或者Builder模式)
- 一般工具類都是單例:無構造方法、私有構造方法或構造方法拋異常;提供靜態方法,保證易用性
我理解的好的工具類應用是這樣的:
- 規避而不是減少重復造輪子,這要求我們新功能必須使用框架提供的工具類;已有功能盡快切換到框架提供的工具類并刪除原工具類。
- 團隊內達成共識,使用同一個工具類處理同一個功能
- 工具類使用順序:HuTool --> 自定義工具類 --> Apache工具類 --> JDK工具類,其他工具類不允許使用
Hutool是一個小而全的JAVA工具類庫,通過靜態方法封裝,降低相關API的學習成本,提高效率。
PS:個人使用習慣是需要什么工具類,直接在IDE中聯想,然后查看源碼的實現是否匹配。
總結:工具類本身并不難,但每一個工具類的作者都應該時刻記著工具類是開放給所有人的,所以在命名、規范性、完備性(除了功能點還有功能面)、適應性(使用上盡量不要有依賴和限制)、易用性、擴展性、維護性、兼容性等方面必須多加思考,做到不丟人和不怕丟人。