第一篇居然是菜雞的自以為的寫法,誠惶誠恐。我想試試看能不能在網路上找到共鳴,或當然,有指正那最好了。
在寫 java 的過程中,一些與類別實體無關的方法,就會很自然而然地把他們寫成 static method,然後包裝在一個只含有 static methods 的 class,在命名上給他加上個 -Utils 後綴。
這個寫法的啟發,來自於在公司參加的 Clean Code 讀書會。在 Clean Code 的第三章,作者 Uncle Bob 提到「應該避免使用多於兩個參數」。那當參數過的時候該如何解決呢?很簡單,把其中幾個參數提升為類別變數就可以了。
這讓我想到在專案裡面四散的 static methods,幾乎每個方法的參數都有五六個以上,其中又至少有三四個是要層層傳遞下去的。而仔細一看,層層傳遞的那些變數基本上都不會變化。
該怎麼做呢?
我現在嘗試的寫法,是建立一次性的類別物件來處理。
以矩陣乘法為例,
static method 的寫法如下:
Matrix c = MatrixUtils.multiply(a, b)
一次性物件的寫法如下:
Matrix c = (new MatrixMultiplier()).multiply(a, b)
以上的例子或許過於簡單,不過在構想裡是,把「設定」類型的參數放在建構元中,或者把所有的所需要處理的參數也都放進來(畢竟是一次性的),然後再處理的過程中,讓類別方法去修改類別變數,降低每個方法的參數量。
我想,對於與實體較無關聯的功能,寫成 static method 再正常不過。但當完成一個 static method 需要呼叫多個 static method 的時候,或許就可以考慮用類別進行封裝。
或許是因為這個方法太顯然?或太不值一提?我不是很確定這個東西有沒有名字,我自己暫時把它叫做 Builder-like 寫法。如同 Builder Pattern 最後總是呼叫 build() 來結束這回合(回傳建立好的物件),這個寫法也是呼叫某個方法完成所有事情,就可以把這個物件拋棄。
但這個寫法缺點是有點不直覺,同時完全使用 static method 的寫法也沒有任何錯誤,這樣的寫法差異算是哲學層次的。究竟以後會不會繼續這樣寫,我也不是很清楚。只是先紀錄一下,想知道以後自己會不會回頭笑看自己太圖樣圖森破呢?
後記:在學寫程式的過程中,看過大家的部落格都是範例齊發,沒想到等自己開始來寫居然一時間也擠不出來。我想這篇文章大概沒有人看得懂。希望以後能慢慢熟練。
Comments
Post a Comment