スプラウトメソッドとラップメソッド

レガシーコード改善ガイド (Object Oriented SELECTION)

スプラウトメソッド(Sprout Method)

既存のテストがないメソッドに新しい振る舞いを加える際に、新しく追加する部分を完全に別の操作として扱うこと。
独立した1つの機能としてコードを追加する場合や、まだメソッドのテストを整備していない場合には、スプラウトメソッドの適用が推奨される。

長所

古いコードと新しいコードを明確に区別できる。新しいコードはテストで保護することができる。

短所

元のメソッドやクラスが改善されるわけではない。

スプラウトクラス(Sprout Class)

変更に必要な機能を別のクラスとして切り出し、そのクラスを元のクラスから利用すること。
オブジェクトの依存関係が複雑で、テストでオブジェクトを生成することが困難である場合に用いる。

長所

コードを直接書き換える方法よりも、確信を持って変更を進められる。

短所

仕組みが複雑になる。

ラップメソッド(Wrap Method)

元のメソッドと同じ名前のメソッドを新しく作り、古いコードに処理を委譲すること。

長所

既存のメソッドの長さが変わらないこと。
既存の機能から新しい機能を明確に独立させられること。

短所

追加する新しい機能のロジックを、既存機能のロジックと絡ませられないこと。
古いコードに別名をつける必要があり、不適切な名前をつけてしまいがちなこと。

ラップクラス(Wrap Class)

別のクラスをラップするオブジェクト群を生成し、それらを順に渡す(Decoratorパターン)。
ラップする側のクラスは、ラップ対象のクラスと同じインタフェースを持つ。

長所

既存のクラスに変更を加えずに、システムに新たな振る舞いを追加できること。

短所

仕組みが複雑になる。

コメントを残す