問題タブ [singleton]
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.
c# - クラスアクセスの質問
私はこれが単純であるべきだと知っています、そして私はそれを知っているべきですが、それは当分の間私を逃れています.
ログの記録に役立つシングルトン パターンを使用しています。ただし、ロギングは 1 つのクラスでのみ行われ、シングルトンは基本的に、ログ ファイルを開閉するブール値のウォッチャーです。ファイルを複数回開いたり、複数回閉じたりしたくないので、シングルトン パターンを使用しています。しかし、私はそれをグローバル値にしたくありません。また、パッケージ内でアクセスする場合でも、他のクラスを望んでいません。この1つのクラスだけがそれを使用するようにするにはどうすればよいですか?
c# - これはシングルトンの正当な使用ですか?
(免責事項:この質問はASP.NET に固有のものではありません)
ログイン コントロールと同様に、テンプレート化できるコントロールがあります。
テンプレート化されたコントロールは次のようになります。
私の質問は次のとおりです。代わりにここではシングルトンが適切でしょうか?
シングルトンはグローバル変数に関連付けられています。この場合、状態はありません。
シングルトンは、ハードコーディングされた依存関係にも関連付けられています。この場合、特定のタイプの知識が保証されます。
language-agnostic - 不要なシングルトンを削除するには、コードをどのようにリファクタリングする必要がありますか?
反シングルトンの解説を最初に見始めたとき、私は混乱しました。最近のいくつかのプロジェクトでシングルトンパターンを使用しましたが、それは見事に機能していました。実際、私はそれを何度も何度も使用してきました。
さて、いくつかの問題に遭遇した後、このSOの質問、特にこのブログ投稿を読んだ後、私は世界にもたらした悪を理解しました。
だから:既存のコードからシングルトンを削除するにはどうすればよいですか?
例:
小売店の管理プログラムでは、MVCパターンを使用しました。私のModelオブジェクトはストアを記述し、ユーザーインターフェイスはビューであり、2つの間のリエゾンとして機能する一連のコントローラーがあります。素晴らしい。ストアをシングルトンにしたことを除いて(アプリケーションは一度に1つのストアしか管理しないため)、ほとんどのコントローラークラスもシングルトンにした(1つのmainWindow、1つのmenuBar、1つのproductEditor ...)。これで、ほとんどのControllerクラスが次のような他のシングルトンにアクセスできるようになりました。
代わりに:
- 各オブジェクトのインスタンスを1つ作成し、それらにアクセスする必要があるすべてのオブジェクトに参照を渡しますか?
- グローバルを使用しますか?
- 他に何かありますか?
グローバルはまだ悪いでしょうが、少なくとも彼らはふりをしていません。
#1は、ひどく膨らんだコンストラクター呼び出しにすぐにつながることがわかります。
他の誰かがこれをもう経験しましたか?グローバルまたはシングルトンでなくても、共通の変数に多くの個別のクラスアクセスを与えるオブジェクト指向の方法は何ですか?
design-patterns - Singleton を使用せずに非 Bean オブジェクトから Spring Application コンテキストを取得する
非 Bean オブジェクトから Spring アプリケーション コンテキストを取得する必要があります。SO の別のスレッドでは、受け入れられた回答は、シングルトンを使用してアプリケーション コンテキストを取得することを提案しています。 Spring アプリケーション コンテキストの取得
しかし、シングルトンを使用すると、コードがより結合され、テストしにくくなります。これは、多くのスレッドで議論されている通常の問題です (例:シングルトンの何が悪いのか)
質問は、シングルトンを使用せずに非 Bean オブジェクトからアプリケーション コンテキストを取得するエレガントな方法はありますか?
java - EJB を介して静的シングルトンを共有する
Web サービスでキャッシュを作成しようとしています。このために、このキャッシュを他のステートレス Bean に提供するために、新しいステートレス Bean を作成しました。このキャッシュは、MyObject が POJO である単純な静的 ConcurrentMap です。問題は、異なるキャッシュ オブジェクトがあるように見えることです。1 つはクライアント Bean 用で、もう 1 つはローカルです。
この割り当ての後、CacheServiceBean 内から cache.size を呼び出すと、0 になります。Bean を介して静的シングルトンを共有することは可能ですか? 最終的にデータベーステーブルを使うことにしましたが、まだ考え中です。
ご回答ありがとうございます。
php - 複数DB接続クラス
Singleton パターンを使用して複数の DB 接続を作成するにはどうすればよいですか? または、同じクラスを共有するが複数の接続を共有するためのより良いアプローチがあるでしょうか?
.net - .NET でのグローバルとシングルトン
ここでは非常に一般的な状況があります。そして、何年もの間、私がやっていることは業界標準によって正しいかどうかわかりませんでした.データベースに接続するアプリケーションを考えてみてください。起動時またはアプリケーションの起動時にデータベースが参照されます。
その接続文字列をアプリのスコープ内のどこかに保存する必要があります。私が見た最も一般的な方法は、接続文字列を保存するための get/set メソッドを持つモジュールまたはグローバル クラスです。もう 1 つの方法は、Singleton を使用することです。どちらのオプションでも、DAL は必要に応じて GetConnectionString メソッドを介して接続文字列にアクセスできます。
これを行うより良い方法はありますか?
更新:私は構成ファイルを持っていません。たとえ持っていたとしても、アプリケーションインスタンスの存続期間中に接続文字列を一度読み取る必要があります。「任意のクラスに注入する」部分について詳しく説明できますか
winapi - シングルトン COM オブジェクト内の別の dll から COM オブジェクトへのメンバ ポインタを保持する安全な方法はありますか?
私は最近、シングルトン クラス ファクトリCOM
を使用し、シングルトン オブジェクトとは異なる DLL に実装された他の COM オブジェクトへのポインターであるメンバーを持つオブジェクトで問題に遭遇しました。
これらの他の COM オブジェクトはシングルトン オブジェクトによって作成され、それがそれらへの唯一の参照でした。
シングルトン オブジェクトは、そのモジュールがアンロードされるまで決して破棄されないため、その時点で、他の COM オブジェクト (シングルトンのメンバー) が実装されている DLL が既にアンロードされている場合があり、その場合は、シングルトンがデストラクタでこれらのオブジェクトへの参照を解放したときにクラッシュしました。
他の COM オブジェクトを実装する DLL は、オブジェクトへの参照が保持されていることを認識し、S_FALSE
そのDllCanUnloadNow
メソッドから戻ります。
ただし、これは DLL が常にアンロードされるのを妨げているようには見えません。
シングルトン COM オブジェクト内の別の dll から COM オブジェクトへのメンバ ポインタを保持する安全な方法はありますか?