問題タブ [null-object-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Null オブジェクトの設計パターンに関する質問
最近、Null Object デザイン パターンに関するこの YouTube チュートリアルを見ました。何もしない NullCar が無限ループを起こすなどのエラーがありましたが、コンセプトはよく説明されていました。私の質問は、null になる可能性のあるオブジェクトにゲッターがあり、コードで使用されている場合はどうすればよいですか? デフォルトで返される値をどのように知ることができますか? または、すべてのオブジェクト内にこのパターンを実装する必要がありますか? 文字列またはプリミティブを返す必要がある場合はどうすればよいですか? 私はJavaの観点から話しています。
編集:デフォルト値のテストのためにnullオブジェクトをテストすることはありませんか? そうでない場合、なぜですか?
c# - NullObjectパターンを使用するときに無効な状態をチェックする
Null Objectパターンを使用する場合、状況が無効かどうかをどのように「チェック」しますか?たとえば、リポジトリにアイテムが見つからない場合は、ユーザーに「見つかりません」というメッセージを表示します。
栄光のヌルチェックを行う必要がありますか?
- if obj.equals(new NullObject()){showNotFound(); }
- if obj.ID.equals(INVALID_ID){showNotFound(); }
これらの手法は、NullObjectパターン自体の目的を無効にしているようです。
nhibernate - データベースの永続性なしで、NHibernateにファーストクラスの「Nullオブジェクト」を認識させるにはどうすればよいですか?
ドメインでNullObjectパターンを利用したいのですが、それに関連するレコードをデータベースに入れたくありません。NHibernateがSQLnull値をNullオブジェクトにマップできればそれを好みます。 、 およびその逆。
これは可能ですか(マッピングにFluent NHibernateを使用)
PSこれは、人々が解決しようとしているかなり一般的な問題のようですが、なぜ私は答えを見つけるのに苦労したのだろうかと思います。
編集: このブログエントリから判断すると、直接可能になるとは思えません:NHibernate&Nullオブジェクトパターン:オプション
design-patterns - 空のメソッドを使用したデフォルト実装の設計パターン
空の NO-OP 実装を使用してインターフェイスのすべてまたは一部のメソッドを実装する、抽象的でない既定の実装が提供されるシナリオを説明する特定の設計パターンはありますか。これは、サブクラス自体が必要/使用しない可能性のあるメソッドを実装する負担をサブクラスに軽減することを目的として行われています。
SAX フレームワークの Java の DefaultHandlerやMouseAdapterなど、このパターンが何度も使用されているのを見てきました。場合によっては、そのようなクラスはアダプターと呼ばれますが、アダプター パターンは 2 つの異なるインターフェイス間で変換されるという印象を受けました。
これらのインスタンスでは、そのインターフェイスの未定義のサブセットに変換されている宣言されたインターフェイスが 1 つしかないことを考えると、これがアダプター パターンの精神にどのように含まれているかは明確ではありません。
さらに、いくつかのメソッドが実装を持つ可能性があり、NullObject は伝統的にシングルトンであることを考えると、これがNullObject パターンにどのように準拠しているかはよくわかりません。
design-patterns - Fowler Null オブジェクト パターン: 継承を使用する理由
ファウラー PoEAA p. 498 null-object パターンを次のように定義します (サンプルは短縮されています。言語は c# ですが、問題ありません)。
INull
マーカーインターフェイスとして使用されます。私は次の 3 つの理由から、このアプローチがあまり好きではありません。
- プロパティは仮想としてマークする必要があります
- エンティティ クラスを封印できなくなりました
- 少なくとも (n+1) 個の新しい型が導入されています (n 個の null オブジェクト、1 個のマーカー インターフェイス)
なぜこのように実装されていないのですか:
一般的に、Fowlers の例はすべてよく考えられていることがわかりましたが、ここで見落としているものがあることは明らかです。
model-view-controller - null dto の受信時のコントローラー アクションの動作
コントローラーに渡された DTO が null であることをコントローラーが検出した場合、DTO のインスタンスをインスタンス化する必要があります (Null オブジェクト パターンを参照)、または単に例外をスローする必要がありますか?
ありがとう
c# - NULL オブジェクト デザイン パターンを一般的な形式で実装するにはどうすればよいですか?
すべてのビジネス オブジェクトに実装する必要がないように、null オブジェクトのデザイン パターンを一般的な形式で実装する方法はありますか。
私にとっては、すべてのビジネス クラスに必要な 2 つの高レベル クラスがあります。1 つは単一のレコード用で、もう 1 つはリスト用です。したがって、NULL オブジェクトの設計パターンを高レベルで実装する方法が必要であり、すべてのクラスに実装する必要はないと思います。
方法はありますか?
design-patterns - Null オブジェクト パターンの良い例? (メール便で一部サービスを提供)
私が取り組んでいる Web サイトでは、フロントエンドとバックエンド (CMS) で使用するメディア サービス オブジェクトを作成しました。このメディア サービス オブジェクトは、ローカル リポジトリ (DB) 内のメディアを操作します。ビデオをアップロード/埋め込み、画像をアップロードする機能を提供します。
つまり、Web サイトの訪問者はフロントエンドでこれを行うことができますが、サイトの管理者はバックエンドでもこれを行うことができます。
このサービスは、訪問者がフロントエンドで新しいメディアをアップロード/埋め込みしたときに管理者にメールを送信することを望みますが、バックエンドでメディアを自分でアップロード/埋め込みするときはメールを送信しないでください。
そのため、メール機能を模倣する null オブジェクトをバックエンドの Media Service に渡すのに適しているかどうか疑問に思い始めました。バックエンドにメール機能も実装する必要があると判断した場合、これが役立つかもしれないと思いました。
簡単に言えば、次のようなことをしたいと思います。
フロントエンド:
バックエンド:
これについてどう思いますか?これは理にかなっていますか?それとも、今後の問題に備えていますか?
c++ - C++: 構造体の代わりに NULL を返す
私は struct を持っていFoo
ます。擬似コード:
C++でこれを達成するにはどうすればよいですか?
多数の不正確な点を削除するために編集されました。
language-agnostic - すべてのクラスに NullObject を作成することは可能ですか? (もちろん工具付き)
NullObjectPatternは、 「安全な」 (中立的な) 動作を意図しています。
アイデアは、何もしないオブジェクトを作成することです(ただし、NullPointerExceptionもスローしません)
たとえば、次のように定義されたクラス:
このコードでは NullPointerException が発生します。
NOPが言うことは、次のようなオブジェクトを持つことができるということです:
そして、それをデフォルト値として使用します。
作成するクラスごとにコードを繰り返す必要がある場合、問題は発生します。解決策は、それを作成するためのツールを用意することです。
そのようなツールを作成したり、それを使用したりすることは、実行可能/合理的/有用でしょうか (存在する場合)?
おそらく、AOP または DI を使用すると、デフォルト値が自動的に使用される可能性があります。