すべてのビジネス オブジェクトに実装する必要がないように、null オブジェクトのデザイン パターンを一般的な形式で実装する方法はありますか。
私にとっては、すべてのビジネス クラスに必要な 2 つの高レベル クラスがあります。1 つは単一のレコード用で、もう 1 つはリスト用です。したがって、NULL オブジェクトの設計パターンを高レベルで実装する方法が必要であり、すべてのクラスに実装する必要はないと思います。
方法はありますか?
すべてのビジネス オブジェクトに実装する必要がないように、null オブジェクトのデザイン パターンを一般的な形式で実装する方法はありますか。
私にとっては、すべてのビジネス クラスに必要な 2 つの高レベル クラスがあります。1 つは単一のレコード用で、もう 1 つはリスト用です。したがって、NULL オブジェクトの設計パターンを高レベルで実装する方法が必要であり、すべてのクラスに実装する必要はないと思います。
方法はありますか?
私の理解では、NULL クラスはすべてのクラスに実装する必要はありませんが、すべてのインターフェイスに実装する必要があります。その場合、リフレクションを使用して、特定のインターフェイスの空の標準実装を生成するメソッドを確実に作成できます。ただし、NULL オブジェクトの望ましい動作には、特定のインターフェイスの特殊なケースが含まれる場合があり、その場合、一般的なソリューションは失敗します。
たとえば、 を実装するインターフェースを持つことができますIComparable
。場合によっては、NULL オブジェクトを他のすべてのオブジェクトと等しくしたい場合もあれば、他のすべてのオブジェクトよりも小さくしたい場合もあります。
編集:これIComparable
は単なる例です。要点は、一般的な NULL クラスの実装を持つことは賢明だとは思わないということです。NULL
NULL クラスを使用すると、戻り値の特殊なケースを処理しなくてもプログラムを動作させることができます。デフォルトの実装がある場合は、特殊なケースを再度確認する必要があり、パターンの要点全体が見落とされます。
ここですでにSOについて説明したように、NULLオブジェクトの実装はドメインに依存するため、あなたの質問に対する一般的な答えはないと思います。おそらく、あなたはあなたの種類のビジネスオブジェクトに対する多かれ少なかれ一般的な解決策を見つけるでしょう。あなたが考えていることのいくつかの例を提供するならば、あなたはおそらくいくつかのより良い答えを得るでしょう。