2009-08-03 1 views
3

私はちょっと変わったコードを作っています。私が取り組んでいるコードは、CSVファイルを取り込んでデータをデータベースにインポートするインポートユーティリティの一部です。コード内System.out.printlnを別のメソッドに配置するのは良いですか?

、私は以下を参照してください。私はこの方法に見ると、それは単にのSystem.out.printlnを呼び出している

ImportUtils.printf("Validation started"); 

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

どんな利点がこれにありますか?これは問題を道路の下に置くことができますか?

+0

また、コード内でSystem.out.printlnも使用していることがわかりました。 ImportUtils.printfとSystem.out.printlnは約40行離れています。ちょうど私がそれを追加すると思った... – Ascalonian

答えて

15

単純なSystem.out.printlnラッパーを作成する代わりに、フルログAPIに切り替えることを検討してください。利用可能なものが多数あります(Commons LoggingLog4jSLF4Jなどあります)。これらは、初期開発に役立つコンソールの周りの簡単なラッパーとして簡単に構成できます。彼らはファイルに書き込んだり、メールを送信したり、データベースに書き込んだりすることができます。これらはまた、(クラスがログを生成しているような)コンテキスト情報を提供します。

+1

+1、優れたアドバイスSystem.outを使用すると、コンソールを使用する際に非常に緊密に結びついています。ロギングフレームワークを使用すると、あなたが望むならば超柔軟性が得られます。 –

5

これは良いことだと思います。つまり、ImportUtils.printfメソッドの実装を変更するだけで、任意のバッファに自由に書き込むことができます。

必要ですか?私は分かりませんが、それは残忍かもしれませんが、この種のカプセル化は、しばしば必要なときに恩恵であることがわかります。 印刷用printfスタンドがをフォーマットし、この方法はprintfプログラマが知っているの機能のどれを持っていないので、この方法のための

+0

それに私を打つ。 +1 – MitMaro

2

printfが悪いです。

一方、このインダイレクションは、今後、ロギングメソッドを拡張し、基盤となるコードを変更せずに更新できるようにすることで役立ちます。私はそれをprintfと呼んでいないでしょう。

+2

ああ、すべてがこのメソッドを呼び出すので、代わりに 'System.out.printf'を呼び出すだけです(varargsを追加する)。 –

+1

@mmyers良いですが、私はまだ一般的な方法に専門性に結びついた非常に特殊な名前を付けることは悪い考えだと思います。 –

1

ないのJavaの男が、これはこのような場合は、私が見る唯一の利点は、頭がで始めるC-プログラマを与えているC.

ていると、「あなたは、任意の言語でのFortranを書くことができる」の古典的なケースのように見えますあなたのAPIメソッドが "DisplayText"または関連するものと呼ばれた場合、私はそれがいくつかの価値を持っているのを見ることができました。

6

強迫的デカップリングの典型的な例。 System.outに別の場所に書きたい場合は、System.setOut()を自由に使うことができますので、全く意味がありません。柔軟性が必要な場合は、選択するロギングフレームワークが不足しているわけではありません。

+0

はい、ちょうど誰かがあまりにも賢明で、プロセスの潜在的なバグを作成しようとしています。まずメソッド名が間違っています - println()の代わりにprintf()。また、2つのバージョンが一緒に使用されているため、コードを変更するが、他のバージョンは変更しないように、実装を変更するよう誘惑される可能性があります。 –

1

誰かが賢明で、ロギングフレームの作業や後で開発サイクルの何かに変更しようとしました。

この問題は、現時点ではsystem.outの呼び出しを変更したことが原因です。ロギングフレームワークに対しては、すべてのロギング呼び出しは同じクラスと同じ機能から来ており、すべて同じ優先順位を持ちます。これは、ロガーが自動的に提供する便利な機能の多くを失うことを意味します。どのクラスがログメッセージを書き込んだのかを確認する。デバッガをより高いログレベルに設定して、最も重要なメッセージなどを取得するだけです。

だから私はこれに反対します。 system.outから素早い変更を加えることはいい考えです。ロガーやもっと洗練されたものに変換することはできますが、長期的には役に立ちません。

関連する問題