一部の API (JCE、JSSE など) がシングルトン マップを通じて構成可能なプロパティを提供するのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2283435

  •  21-09-2019
  •  | 
  •  

質問

例えば:

Security.setProperty("ocsp.enable", "true");

そして、これは次の場合にのみ使用されます。 CertPathValidator 使用されている。インプリメントには 2 つのオプションがあります。

  • 再びシングルトンですが、各プロパティのゲッターとセッターを使用します
  • 現在のコンテキストに関連するプロパティを含むオブジェクト:CertPathValidator.setValidatorProperties(..) (すでにセッターがあります PKIXParameters, これは良いスタートですが、すべてが含まれているわけではありません)

いくつかの理由が考えられます:

  • コマンドラインからプロパティを設定する - コマンドラインから上記で提案したクラスのデフォルト値への単純なトランスフォーマーは簡単です。
  • さまざまなプロバイダーによる追加のカスタム プロパティを許可します。 public Map getProviderProperties(), 、 あるいは public Object .. キャスト付き。

私が興味を持ったのは、これらのプロパティが常に最も目立つ場所にあるわけではなく、API の使用中に表示される代わりに、(運が良ければ) 取得する前に何十もの Google 検索結果を調べなければならないからです。なぜなら、そもそも、自分が何を探しているのか正確にわかっているわけではないからです。

私が今観察したもう 1 つの致命的な欠点は、これがスレッドセーフではないことです。たとえば、2 つのスレッドが ocsp 経由で失効を確認したい場合は、 ocsp.responderURL 財産..おそらく、相互の設定を上書きします。

役に立ちましたか?

解決

これは、あなたが過去に行ったことがあり、設計上の決定について考える力という大きな疑問が実際にあります。年前に私に起こっている必要があります質問をしてくれてありがとう!

異論はあまりこのシングルトン側面(全く別の議論がそのことについて発生する可能性がありますが)ではないようですね - 。しかし、文字列キーの使用

私はスキームのこの種を使用するAPIに働いてきた、とあなたは上記の概説の理由は間違いなく駆動因子であった - それは、コマンドラインまたはプロパティファイルを解析するために狂気シンプルになり、それはせずに、サードパーティの拡張が可能になります公式APIへのインパクトます。

私たちの図書館では、我々は実際に公式のパラメータのそれぞれについてのstatic final String型のエントリの束を持つクラスを持っていました。開発者はまだそれがそうすることを感知作られたコード補完を使用することができます - これは私たちに両方の長所を与えました。また、内部クラスを使用して、関連の設定の階層を構築することが可能となります。

言ったすべては、私が第一の理由(コマンドラインの容易な解析が)実際にそれをカットしていないと思います。かなり容易になり、それがメインアプリケーションクラスに漂流からストリング]>オブジェクト変換の嫌なものを妨げるセッターの束に設定をプッシュするための機構を駆動反射を作成する。

拡張は、ビットトリッキーですが、私はそれはまだ反射駆動システムを使用して処理することができると思い。アイデアもregisterExtensionConfiguration(XXX)メソッドを持っている主な構成オブジェクト(その中のすべてのセッターを持つもの)を持っていることであろう。標準的な記法(おそらく分離ドット)セッターが呼び出されるべき場所を決定するように構成オブジェクトの得られた非巡回グラフに飛び込むために使用することができる。

上記の方法の利点は、それが一つの場所に例外処理を解析するコマンドライン引数/プロパティファイルのすべてを置くことです。それがヒットを取得する前に、数週間のために漂っ誤フォーマットされた引数のリスクがありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top