null オブジェクト パターンを使用するように、null のチェックがあちこちにある大きなクラスをリファクタリングしています。これまでのところ、ほぼスムーズに変更されていますが、最終結果にいくつか問題があります。より良い、または別のアプローチがあるかどうか、または以前の方法に戻るかどうかを知りたい.
最大の問題は、次のコードがあることです。
IMyObject myObject = GetMyObject();
if(myObject != null && !myObject.BooleanProperty)
DoSomething();
ご覧のとおり、おそらくこの条件から null チェックを削除できますが、デフォルト値に設定するとコードを実行するブール値のプロパティがあります。常に true を返すと、見つけて排除するのが困難な微妙なバグが発生する可能性があります。
もう 1 つの問題は、次のようにチェックを null から変更しなければならなかったことです。
if(myObject.GetType() != typeof(MyNullObject))
return false;
DoSomething();
nullをチェックするだけでなく、型をチェックする必要があるため、これは単純に醜いです。オブジェクトのプロパティの 1 つを返したり、そのメソッドの 1 つを実行したりしていないため、このような状況がクラスで 3 回発生します。このチェックを行う必要があります。
そして最後に、オブジェクトには null 許容ではない DateTime プロパティがいくつかあり、設計者はそれらを null 許容にすることを望んでいません。ここでも、MinDate 値をデフォルトとして使用すると、厄介なバグがコードに侵入する可能性があります。
それで、あなたはそれを持っています。これは、スパゲッティ ヌル チェックがあちこちに散らばっているよりも、ヌル オブジェクト パターンの方が悪いだけの場合ですか? これを達成するためのより良い方法はありますか?
回答ありがとうございます。