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

レガシーコード改善ガイド

関連するリファクタリング技法
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