構成設定の問題に適用できるデザインパターンはどれですか?


83

大規模で複雑なソフトウェア製品では、構成可能な設定を管理することが大きな問題になります。この問題に対して私が見た2つのアプローチは次のとおりです。

  • システム内の各コンポーネントに、構成ファイルまたはレジストリ設定から独自の構成をロードさせます。
  • 構成可能なすべてのシステム設定をロードする設定ローダークラスがあり、各コンポーネントに設定ローダーに設定を照会させます。

これらのアプローチはどちらも私には間違っていると感じています。

問題を単純化するために使用できるデザインパターンはありますか?依存性注入手法を利用するものかもしれません。


4
オプション2が間違っているのはなぜだと思いますか?
ChaosPandion 2009

2
通常はシングルトンとして実装されますが、他の方法で実装することもできます。
ダニエルビンガム

回答:


47

クエリの設定、読み込み、保存のためのインターフェースを作成することを好みます。依存性注入を使用することで、これを必要とする各コンポーネントに注入できます。

これにより、構成戦略を置き換えるという点で柔軟性が得られ、すべてが機能するための共通の基盤が提供されます。私はこれを単一のグローバルな「設定ローダー」(オプション2)よりも好みます。特に、どうしても必要な場合は、単一のコンポーネントの構成メカニズムをオーバーライドできるためです。


7
こんにちは、サンプルを共有して
いただければ幸いです

20

私は現在、構成キーの値へのマップを保持する1つのグローバルシングルトンオブジェクトによって構成が管理されているシステムで作業しています。一般に、システムで同時実行のボトルネックが発生する可能性があり、単体テストなどでずさんなため、この方法で行われていなかったと思います。

Reed Copseyにはその権利があると思います(私は彼に投票しました)が、依存性注入に関するMartinFowlerのすばらしい記事を読むことを強くお勧めします。

http://martinfowler.com/articles/injection.html

ちょっとした補遺も...モックオブジェクトタイプの単体テストを実行したい場合は、依存性注入が間違いなく進むべき道です。


デコレータはあなたのニーズに合っているようです。クラスを独自の方法でシリアル化できるようにするSerializableデコレータを作成できます。ストラテジーを使用して、すべてのオブジェクトにシリアル化のストラテジーを持たせることができます。シリアル化する必要のないオブジェクトは、無視戦略を使用できます。フィールドOnlyFields戦略などをシリアル化するだけでよいもの。あなたll be flexible with adding new things to your config. Sure as all approaches this have itの長所と短所。
Yaroslav Yakovlev

4

これはどう。単一のメソッドconfigure(configuration)を使用して構成可能なインターフェースを定義します。構成引数は、構成パラメーターの名前をそれらの値に関連付ける単なるハッシュテーブルです。

ルートオブジェクトは、任意の方法で構成ハッシュテーブルを作成できます(例:構成ファイルからの読み取り)。このハッシュテーブルには、ルートオブジェクトiselftの構成パラメーターに加えて、そのコンポーネント、サブコンポーネント、サブサブコンポーネント(など)のいずれかが使用する可能性のあるパラメーターを含めることができます。

次に、ルートオブジェクトは、構成可能なすべてのコンポーネントでconfigure(configuration)を呼び出します。


0

構成ローダーを定義するインターフェースの複数の実装を作成できます。基本的に、1つの基本的なインターフェイスをconfigLoaderとして定義し、FileSystemLoader、ClasspathLoader、EnvVariablesLoaderなどのさらに異なる実装を定義できる戦略パターン。詳細はこのリンクにあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.