スプラウトメソッド(Sprout Method)
既存のテストがないメソッドに新しい振る舞いを加える際に、新しく追加する部分を完全に別の操作として扱うこと。
独立した1つの機能としてコードを追加する場合や、まだメソッドのテストを整備していない場合には、スプラウトメソッドの適用が推奨される。
長所
古いコードと新しいコードを明確に区別できる。新しいコードはテストで保護することができる。
短所
元のメソッドやクラスが改善されるわけではない。
スプラウトクラス(Sprout Class)
変更に必要な機能を別のクラスとして切り出し、そのクラスを元のクラスから利用すること。
オブジェクトの依存関係が複雑で、テストでオブジェクトを生成することが困難である場合に用いる。
長所
コードを直接書き換える方法よりも、確信を持って変更を進められる。
短所
仕組みが複雑になる。
ラップメソッド(Wrap Method)
元のメソッドと同じ名前のメソッドを新しく作り、古いコードに処理を委譲すること。
長所
既存のメソッドの長さが変わらないこと。
既存の機能から新しい機能を明確に独立させられること。
短所
追加する新しい機能のロジックを、既存機能のロジックと絡ませられないこと。
古いコードに別名をつける必要があり、不適切な名前をつけてしまいがちなこと。
ラップクラス(Wrap Class)
別のクラスをラップするオブジェクト群を生成し、それらを順に渡す(Decoratorパターン)。
ラップする側のクラスは、ラップ対象のクラスと同じインタフェースを持つ。
長所
既存のクラスに変更を加えずに、システムに新たな振る舞いを追加できること。
短所
仕組みが複雑になる。