1

そのため、ローカルのデータベース接続を必要とし、いくつかのWebサービスを使用してデータを送受信するアプリに取り組んでいます。

  • DbConnectionデータベース操作が必要なときはいつでも、クラスのオブジェクト (これはデータベースを取得するために使用しているクラスの名前です)を作成し、同じ操作を実行します。

  • 同様に、インターネットに接続するために、同じオブジェクトを使用DefaultHttpClientして作成します。接続を取得してWebサービスstaticを呼び出す必要があるときはいつでも、オブジェクトを作成して応答データを取得します。HttpResponse

1)正しいアプローチまたはパターンを使用していますか?

2)ポイント番号2に焦点を当てたもう1つのことは、静的とシングルトンが同じように機能するかどうかです。

4

4 に答える 4

4

私は正しいアプローチまたはパターンを使用していますか?

私はそうは思わない。接続にシングルトン(または静的)を使用する場合、複数の接続が必要になる可能性があるコンテキストでコードを使用/再利用する必要がある場合は、困難になります。たとえば、アプリケーションをマルチスレッドにしたり、ライブラリに変換したりする場合です。

シングルトンには、妥当性に関しても問題があります...

一般的に言えば、シングルトン(またはスタティック)で実行できることはすべて、ある種のコンテキストパラメーターでも実行できます。依存性注入(DI)フレームワークは、共有オブジェクトを作成し、それらを必要とする他のオブジェクトに「ワイヤリング」するための優れた方法を提供します...シングルトンやスタティックを使用しません。または、さまざまな方法で手動で行うこともできます。

静的とシングルトンは同じように機能しますか?

シングルトンはデザインパターンです。スタティックは、シングルトンパターンを実装するために使用できるJava言語機能です。したがって、それらは同じもの(または同じ種類のもの)ではありませんが、関連しています。

于 2013-03-24T14:24:58.230 に答える
1

シングルトンが常に悪いわけではありません。あなたがそれらを使用することを強制されない限り、それらを避けてください(いくつかのダムフレームワークはあなたに他のオプションを与えないので)

  • それらは意味がありません、グローバル変数はどういう意味ですか?複数のクラスローダーがある場合はどうなりますか?同じプログラムを2回実行するとどうなりますか?
  • それらは隠れた時間的結合を引き起こします。シングルトンAはシングルトンBの前に初期化する必要がありますが、シングルトンCまたはシングルトンDの前に初期化する必要はありません。ほとんどの人はJavaでシングルトンの初期化時間を制御する方法さえ知りません。(基本的に、静的フィールドに触れて初期化されていることを確認する必要がありますが、すぐに触れないでください。そうしないと、順序が崩れます!)
  • securitymanagerなどの安全な環境、またはEなどの安全な言語を使用している場合、セキュリティの脆弱性が発生します。
  • それらをマルチスレッドコードで動作させるのは難しいです。難しいことですが、Javaのような言語でこれを「正しく」行う方法を知っている人は世界に数千人しかいません。Javaのような言語では、アクターモデルを模倣したものを単純にエンコードしない限り、モジュール間分析が必要です。 Java同時実行の目的
  • java言語仕様(gilad bracha)の共著者は、シングルトンはひどいものであり、シングルトンなしで新しい言語(ニュースピーク)を作成したとさえ言っています

あなたが何かの物を渡すか、あなたは上記の問題に加えて私がおそらく言及するのを忘れたより多くに直面するかのどちらかです。2013年にそのようなありふれた問題がまだ存在する理由は私を超えています。

于 2013-03-24T14:46:05.520 に答える
0

わお。あなたの質問にはあなたが思っている以上のことがたくさんありますが、短く短い答えを与えるために、私が見たほとんどのプロジェクト(ORMを使用していない、あなたが調べたいもの)には、ラップするクラスがあります適切なクエリをすべて呼び出し、エスケープ&cを処理するDBオブジェクトの周囲。パブリックインターフェイスを実装して、ファクトリクラスが一致するインターフェイスを期待しているものに提供できるようにします。

シングルトン/スタティックに関しては、まあ、それは本当にあなたのニーズに依存します。上記のパターンでは、シングルトンの方がはるかに優れています。つまり、データベースにアクセスする各オブジェクトは、dbオブジェクトへのローカル参照を格納できます。また、シングルトンをフェッチするプロセスを親クラスにカプセル化できることも意味します。静的クラスを使用しても、そのオプションはありません。

于 2013-03-24T14:25:36.483 に答える
0

ポイント1への回答-はい、シングルトンが正しいアプローチです。理想的には、データベースへの接続を1つだけ確立する必要があります。Sinletonは、これを実現するのに役立ちます。

ポイント2への回答-スタティックがないからといって、シングルトンと同じように動作する必要はありません。シングルトンパターンでオブジェクトを作成するために複数の呼び出しを行うと、同じオブジェクトが返されます。ただし、create objectが複数回呼び出されると、静的オブジェクトを複数回作成できます。

ただし、静的オブジェクトが1回だけ作成されることを保証できます。これは、シングルトンパターンと同じになります。

于 2013-03-24T14:27:31.197 に答える