2009-08-03 28 views
3

我正在處理一段我覺得有點奇怪的代碼。我正在使用的代碼是一個導入實用程序的一部分,它接受一個CSV文件並將數據導入到數據庫中。將System.out.println放入單獨的方法是否好?

裏面的代碼,我看到:

ImportUtils.printf("Validation started"); 

當我看着這個方法,它只是調用的System.out.println:

public static void printf(String s) { 
    System.out.println(s); 
} 

有什麼優勢呢?這可能是一個問題嗎?

+0

我也剛剛發現他們在代碼中也使用了System.out.println。所以你會看到大約40行的ImportUtils.printf和System.out.println。只是想我會補充說... – Ascalonian 2009-08-03 16:15:32

回答

15

而不是創建一個簡單的System.out.println包裝考慮切換到一個完整的日誌API。有很多可用的(Commons Logging,Log4j,SLF4J,還有更多)。這些可以很容易地配置爲控制檯周圍的簡單包裝,對初始開發很有用。在這些道路上,這些可以修改爲寫入文件,發送電子郵件,寫入數據庫......這些還提供了上下文信息(比如哪個類正在生成日誌),這些信息非常有用,並且很難實現。

5

我認爲這可能是一件好事 - 通過這種方式,您可以通過簡單地更改ImportUtils.printf方法的實現來自由寫入任何您希望的緩衝區。

有必要嗎?我不知道,這可能是矯枉過正,但這種封裝通常可以證明是需要的時候的福音。

+0

打敗我吧。 +1 – MitMaro 2009-08-03 16:05:54

2

名稱printf的方法是不好的,因爲printf代表打印格式這個方法有沒有一個printf程序員都知道的功能。

另一方面,通過允許將來增強和更新日誌記錄方法而不更改基礎代碼,這種間接性可能非常有用。我只是不會叫它printf

+2

啊,但是因爲所有東西都調用這個方法,所以調用`System.out.printf`是一件簡單的事情(並且添加可變參數)。 – 2009-08-03 16:16:02

+1

@ mmyers很好,但我仍然認爲給一個通用方法一個與專業化有關的非常具體的名字是一個壞主意。 – 2009-08-03 16:59:35

1

不是Java的傢伙,但這個看起來與這種情況下是C.

「你可以用任何語言編寫Fortran程序」的經典案例

唯一的好處我看到的是,給出了C程序員一個良好開端你的API。如果該方法被稱爲「DisplayText」或相關的東西,我可以看到它有一定的價值。

6

迷戀解耦的典型例子。完全沒有意義,因爲如果你真的想讓System.out寫在其他地方,你可以自由使用System.setOut()。如果您需要更大的靈活性,那麼可供選擇的日誌框架並不完全相同。

+0

是的,只是有人試圖過於聰明並在過程中產生潛在的錯誤。首先,方法名稱是錯誤的 - printf()而不是println()。此外,由於兩個版本一起使用,有人可能會試圖改變實現,導致一些代碼更改,但不是另一個。 – 2009-08-03 17:08:22

1

我認爲有人試圖變得聰明,並且很容易在開發週期中更改爲日誌框架工作。

問題在於此時您將呼叫更改爲system.out。對於日誌框架來說,所有日誌記錄調用都來自同一個類和相同的函數,並且它們都具有相同的優先級。這意味着你失去了記錄器自動提供的大部分有用功能。就像看看哪個班級寫了日誌消息一樣。將調試器設置爲更高的日誌級別以僅獲取最重要的消息等。

所以我會建議不要這樣。從system.out進行快速更改看起來是個不錯的主意。記錄器或更復雜的東西,但從長遠來看,這並沒有幫助。

相關問題