ヌルオブジェクトの導入【リファクタリング】
状況
- null値のチェックが繰り返されている
対処
- ヌルオブジェクトを作り、null値チェックと置き換える
メリット
- コードがシンプルになり、どこをポリモーフィックにすべきかがわかりやすくなる
ヌルオブジェクトは、「特殊ケース」とも捉えることができ、この考え方を用いると、
例えば「顧客が不在」の場合と「顧客情報が不明確」な場合の2パターンについて
明確に、すっきりと実装するアイデアが浮かぶでしょう。
それぞれのパターンについてサブクラスを作り、メソッドをオーバーライドするだけだからです。
コードを見る側からも、わかりやすくなるはずです。
手順
元のクラスにnullを表すサブクラスを作り、元のクラスとサブクラス両方にisNullメソッドを実装する。元のクラスではfalseを返し、サブクラスではtrueを返すようにする。
コンパイルする
元のクラスのオブジェクトのインスタンスを要求した時に、null値を返す箇所を、ヌルオブジェクトを返すように置き換える
元のクラスの型の変数とnull値を比較している箇所を、isNullメソッドの呼び出しで置き換える
コンパイルしてテストする
nullかそうでないかによって異なる処理をする部分を見つけ、nullである場合の処理を、ヌルクラスの中にオーバーライドする形で定義する
オーバーライドされた処理に対応する条件分岐を削除する(nullである場合はヌルオブジェクトを返すようにしている(さらにそれ特有の処理をメソッドのオーバーライドで実装している)ので、条件分岐が不要になる)
コンパイルしてテストする
楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本