CoolDriverJPN CoolDriverJPN 2012-07-31 22:31:34

[Java] static おじさんもびっくり!? このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

なぜ、彼はこのメソッドを定義したのでしょうか。書いた人の気持ちになろとう努力しましたが、未だにわかりません。どうやら、私の精進が足りないようです。

public class MyUtil {

  public static boolean isValid(MyData data) {
    return data.isValid();
  }

}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(5)

#1 myun2 myun2 2012-08-14 15:03:05  

眠いと時々やってる気がする…

#2 KeithYokoma KeithYokoma 2012-08-14 15:06:36  

オブジェクトの振る舞いとするか、委譲させるかで迷った挙句両方やってしまった的な?

#3 InternalServerE InternalServerE 2012-08-15 00:21:31  

MyUtil内に他の評価用メソッドが複数並んでいるなら、「呼び出し側コード記述を揃える」意図でこういう冗長化をすることあるなぁ。 あれ、日本語になってないかも。

#4 dddmania dddmania 2014-12-27 04:01:08  

これは、時々やる^^; 元々dataのValidがMyUtilでしか必要無かったのに、機能追加とかで他のクラスでも必要になってisValid()がMyUtilからMyDataに引っ越して跡地を他のクラスの方が片付いたら消そうと思ってそのまま。

#5 nak0326 nak0326 2019-01-07 17:05:15  

これが、ウンコードかどうかは、isValidの抽象度次第だと思います。つまり、staticな方のisValid()と、MyData#isValid()が、同じ抽象度であるならウンコードだし、そうではなくstaticな方のisValidが、より高レベルの抽象度をもっているなら、充分にあり得るコードだと思います。つまり、将来、dataオブジェクトのnullチェックを加えたり、dataの様々な属性からValidかどうかを判断することになる可能性があったりする場合は、MyDataクラスが提供するisValid()よりも高レベルな抽象度を持つものが欲しくなるはずです。isValidのクライアントコード(呼出し側)に、いちいちそんな処理を追加したくないでしょうから、その役をstaticな方のisValidに持たせておけば、MyData#isValidの仕様はそのままで、且つValidメソッドを呼び出すクライアントコードにも手を加えずに、変更箇所を一か所に留めておくことができます。つまり、関心事の分離ですね。ライブラリ(この例ではMyDataクラス)に手を加えられないような場合や、元のライブラリを拡張したいような場合なら、充分ありのコードだと思います。他にも、Wrapperクラスを作るとか、手段はありますが、このコードでもいいのではないでしょうか? 詳細設計まで作成してあるのなら、それを読めばハッキリすると思いますが、このコードだけからは、ウンコードとは判断できないと思います。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[Java] int enum pattern … バ...

このエントリーをはてなブックマークに追加

業務コード使用区分というチェックボックス...

/**
 * 業務コード使用区分のONと業務コード設定区分のONが同一な値の上...

鑑賞する »

[Java] フルHD推奨。

このエントリーをはてなブックマークに追加

画面の左側がわりと無駄な気がします。

public int hoge(){
    int result = 0;
...

鑑賞する »

[Java] 長すぎるor短すぎる関数名

このエントリーをはてなブックマークに追加

Javadocでやれ

public static User findByFirstNameFamily...

鑑賞する »