0

Null Objectパターンを使用する場合、状況が無効かどうかをどのように「チェック」しますか?たとえば、リポジトリにアイテムが見つからない場合は、ユーザーに「見つかりません」というメッセージを表示します。

栄光のヌルチェックを行う必要がありますか?

  1. if obj.equals(new NullObject()){showNotFound(); }
  2. if obj.ID.equals(INVALID_ID){showNotFound(); }

これらの手法は、NullObjectパターン自体の目的を無効にしているようです。

4

4 に答える 4

5

問題は、ニュートラルな動作がないシナリオで Null オブジェクト パターンを使用していることです。マシューが述べたことに加えて、このパターンの使用は、参照が null であることを心配せずに操作を呼び出したい場合にのみ意味があります。

c2.com wikiはそれをうまくまとめています:

最近、null オブジェクト パターンでこの問題に遭遇しました (NullObjectAndRefactoring を参照)。私の意見では、アプリケーション コードが NullObject を使用しているかどうかをチェックする必要がある場合、NullObject クラスは単なる実装の詳細からアプリケーション ドメインの概念。

于 2009-06-30T10:25:14.433 に答える
2

私の意見では、あなたは正しいです。この種の機能が必要な場合は、nullを使用し、nullチェックを実行して、null状態に応答します。

個人的には、「空の」値が意味をなし、それを使用して実行できる場合にのみ、これが実際に役立つと思います。したがって、nullチェックを回避できます。null値(または無効な値)のセマンティクスが必要な場合は、nullが意味をなします(チェックを忘れると、黙って失敗するのではなく、例外がスローされます)。

于 2009-06-30T10:16:01.643 に答える
1

Null オブジェクト パターンの目的は、基本的に、null の可能性がある値に対してメソッドを呼び出したい場合に、null チェックを実行する必要がないようにすることです。しかし、null を特別なケースとして扱いたいので、null チェックを回避する方法はありません。

Null チェックを行うことは、必ずしも Null オブジェクト パターンの目的を無効にするわけではありません。これは、プログラムの他の場所で不要な null チェックを回避するのに役立つ可能性があるためです。

于 2009-06-30T10:26:33.633 に答える
1

このように null オブジェクトを使用することは Null オブジェクト パターンではありません。パターンを使用したい場合は可能です。たとえば、オブジェクトに Name プロパティがある場合は、それを表示するだけで、null オブジェクトが「見つかりません」というメッセージを名前として表示していましたが、作業方法に合わない可能性があります。

于 2009-06-30T10:39:59.707 に答える