技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

ヌルオブジェクトの導入【リファクタリング】

状況

  • null値のチェックが繰り返されている


対処

  • ヌルオブジェクトを作り、null値チェックと置き換える


メリット


ヌルオブジェクトは、「特殊ケース」とも捉えることができ、この考え方を用いると、
例えば「顧客が不在」の場合と「顧客情報が不明確」な場合の2パターンについて
明確に、すっきりと実装するアイデアが浮かぶでしょう。
それぞれのパターンについてサブクラスを作り、メソッドをオーバーライドするだけだからです。
コードを見る側からも、わかりやすくなるはずです。

手順

  • 元のクラスにnullを表すサブクラスを作り、元のクラスとサブクラス両方にisNullメソッドを実装する。元のクラスではfalseを返し、サブクラスではtrueを返すようにする。

  • コンパイルする

  • 元のクラスのオブジェクトのインスタンスを要求した時に、null値を返す箇所を、ヌルオブジェクトを返すように置き換える

  • 元のクラスの型の変数とnull値を比較している箇所を、isNullメソッドの呼び出しで置き換える

  • コンパイルしてテストする

  • nullかそうでないかによって異なる処理をする部分を見つけ、nullである場合の処理を、ヌルクラスの中にオーバーライドする形で定義する

  • オーバーライドされた処理に対応する条件分岐を削除する(nullである場合はヌルオブジェクトを返すようにしている(さらにそれ特有の処理をメソッドのオーバーライドで実装している)ので、条件分岐が不要になる)

  • コンパイルしてテストする


楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本