0

MemcachedClientのインスタンスを含むクラス用のシングルトンを作成しました(これはサーバーへの接続を必要とする任意のオブジェクトである可能性がありますが、具体的な例を提供しています)。MemcachedClientを静的initブロックで初期化します。接続エラーのためにMemcachedClientがインスタンスを作成できない場合、これは、MemcachedClientインスタンスがnullであるため、クラスが無価値であることを意味します。

私の質問:この種の状況に最適な解決策は何ですか?他の人はこの状況にどのように対処していますか?

4

1 に答える 1

1

質問は(タイトルに記載されているように)広すぎます。シングルトンの目的によって異なります。

あなたの場合、明らかな質問: 初期化が失敗した場合、問題が近い将来に解決されると期待できますか? アプリを再起動するだけでなく、試行し続ける (アプリが奇妙な方法で下方にクラッシュしないように再設計する) ことのコストはいくらですか?

エラーを簡単に解決できない場合は、アプリケーションをクラッシュさせてください (適切なログ/アラート/通知を使用してください)。問題が解決するまで実行し続けたい場合、手順は次のようになります。

1)初期化をシングルトンのコンストラクターに渡します(コンストラクターへのアクセスを制御できる場合、なぜそれを静的ブロックに入れるのですか)。

2a) コンストラクターが失敗している間、呼び出しはgetInstancenull を返します。アプリケーションを変更して、それを処理できるようにします。

2b) 問題が存在する場合は、適切な初期化なしでシングルトンを作成します。このオブジェクトのメソッドへの呼び出しは、初期化の問題が解決されるまで、またはオブジェクトが初期化されるまで何もしません。これらのダミー メソッドを処理できるようにアプリケーションを変更します。この方法はより迅速ですが、より複雑です。

3) 新しいインスタンスが要求されたとき (2a の場合)、またはメソッドが呼び出されたとき (2b の場合)、オブジェクトを初期化できるかどうかを再度確認します。

以前のすべてのコストと、問題が解決した後にアプリを再起動するだけのコストを比較してください。

于 2012-06-05T16:28:31.240 に答える