TOP

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

リファクタリング技法

ここではCode Smellを解消するために参考となるリファクタリング技法や、その他参考になりそうな概念を紹介していこうと思います。

リファクタリングに関してはこの辺りの書籍が参考になると思います。


リファクタリング第2版
refactoring
レガシーコード改善ガイド
legacy_code

関連するリファクタリング技法

Organizing Data

Organizing Data

Encapsulate Collection

Encapsulate Collection ListやSetなどのようなCollectionをカプセル化する場合、getterはread onlyなオブジェクトを返すようにしましょう。 また、Collectionに要素を追加するためのaddメソッドやdeleteメソッドを用意しましょう。 ※なぜこんなことをする必要があるのかわからない人はimmutableという概念について知っておきましょう。参考になりそうなサイトのリンクを下に張っておきます。

このページでは、immutableにするためにgetCourcesメソッドはUnmodifiableSetをreturnしています。UnmodifiableSetにaddやdeleteメソッドで要素を追加・削除しようとすると、実行時エラー(UnsuportedOperationException)になります。

Effective Java という本の中では、defensive copyというやり方が紹介されています。 これは、上で紹介したUnmodifiableSetをreturnするのではなく、以下のようにして、参照先の異なるオブジェクトをreturnする手法です。 これであれば、呼び出し元でaddやdeleteメソッドを呼び出すことが可能であり、かつ、オブジェクトの参照先が異なるので元データに影響を与えることもありません。

class Test {
  private Set<String> setTest = new HashSet<>();
  public Set getCources() {
      return new Set(setTest);
  }
}

【immutableの参考】

ちなみに、Javaでimmutable objectの一番身近な例はStringです。

関連するCode Smell