0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【リファクタリング】Collapse Hierarchy(階層の折りたたみ)

Posted at

1. 概要(Overview)

Collapse Hierarchy は、
不要に複雑な継承階層を整理し、サブクラスとスーパークラスを統合する リファクタリングです。

  • サブクラスが実質的に意味を持たず、ほとんどコードを追加・変更していない場合
  • あるいは、スーパークラスが冗長で存在意義が薄い場合

このような場合は階層を簡略化し、単一のクラスに統合した方がシンプル になります。

目的:

  • 不要な階層を取り除き、コードを簡潔にする
  • クラス階層の可読性・理解しやすさを向上
  • 継承関係の誤用によるメンテナンス負荷を軽減

2. 適用シーン(When to Use)

  • サブクラスがほとんどコードを追加していない
  • スーパークラスが抽象化として意味をなしていない
  • クラス間の区別がほぼなく、実質的に冗長 になっている
  • 設計初期では必要と思ったが、実装が進んで無用になった階層

よくある匂い:

  • Speculative Generality(過剰な一般化)
  • Lazy Class(怠け者クラス)
  • Unnecessary Hierarchy(不要な階層)

3. 手順(Mechanics / Steps)

  1. 階層を簡略化できるか確認(責務が重複していないか)
  2. サブクラス → スーパークラス、あるいはスーパークラス → サブクラスへ統合
  3. クラス宣言を削除し、クライアントコードを修正
  4. テストを実行し、動作に問題がないか確認

4. Kotlin 例(Before → After)

Before:意味のない階層

open class Person(
    val name: String
)

class Employee(name: String) : Person(name)
  • EmployeePerson に何も追加していない
  • 実質的に Employee は「名前しか持たない Person」と同じ存在

After:階層を統合

class Person(
    val name: String
)
  • Employee を削除し、Person だけを残す
  • 階層が単純化され、理解しやすくなる

5. 効果(Benefits)

  • クラス階層をシンプル化
  • 可読性・理解しやすさが向上
  • 継承構造の維持コスト削減
  • 過剰な抽象化を排除

6. 注意点(Pitfalls)

  • 将来的に再び階層が必要になる可能性がある(→ そのとき再導入すればよい)
  • 型が変わることで、クライアントコードに修正が必要な場合がある
  • もし多態性(ポリモーフィズム)を将来利用する計画があるなら、無理に統合しない

まとめ

  • Collapse Hierarchy は「不要なスーパークラス/サブクラスを統合する」リファクタリング
  • 判断基準:この階層は本当に意味があるか? ただの名ばかりの抽象化ではないか?
  • 基本思想:過剰な設計は排除し、クラス階層を必要最小限に保つ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?