今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

雰囲気でリファクタリング

アプリケーション自体の起動と終了にかかわっているクラスのいくつかを見ていたら、そこら中にログを記録するメソッドが散在していた。ログの記録に関連して、ResourceBundleとかMessageFormatとかと関連がある。
なーんかいまいち。LogRecorderというクラスを作って、ログを記録している処理を全部そこに突っ込んだ。すると、元のクラスからはResourceBundleやらMessageFormatがなくなったり、StringBufferで文字列を連結しているのがなくなったりで、かなりすっきり。一方、LogRecorderの方も似たような処理がずらっとならんで、見た目はすっきり。その結果、複数のクラスがLogRecorderに依存することになったし、メソッドだけを持った(属性を持たない)クラスができてしまった。
こうすると、見た目はすっきりするけど、ちょっと注意が必要。この場合、LogRecorderを変更するときに何気なく違うクラス(例えばHoge)に依存させてしまったとする。

public class LogRecorder {
    public static void recordHoge(Hoge hoge) {
        // hoge.toString() とかしてみたり
    }
}

すると、今まではHogeに何の関連も持たなかった元のクラスが、ある日突然Hogeに(間接的に)依存するようになってしまう。