プログラムの設定を構成ファイルから読み取る必要があるプログラムがあるとします。それらを格納するシングルトンクラス、各設定の静的プロパティを持つクラス、o名前空間内のグローバル変数を使用してそれらを実装しますか?それとももっと良いものですか?
私の場合、名前空間にグローバルを使用して実装していますが、シングルトンパターンは現在、グローバルよりもさらに悪いと見なされていることを読んだため、グローバルを使用しないように教えられています。
プログラムの設定を構成ファイルから読み取る必要があるプログラムがあるとします。それらを格納するシングルトンクラス、各設定の静的プロパティを持つクラス、o名前空間内のグローバル変数を使用してそれらを実装しますか?それとももっと良いものですか?
私の場合、名前空間にグローバルを使用して実装していますが、シングルトンパターンは現在、グローバルよりもさらに悪いと見なされていることを読んだため、グローバルを使用しないように教えられています。
それらを別のクラスまたはモジュール(boost.program_optionsと同様)に実装し、依存性注入とパラメーター値を介して残りのコードベースに伝播します。
これらの値が変更されない程度に、オプションファイルまたはデフォルトのパラメータ値としてそれらを入れて、忘れることができます。
これにより、コードベースを変更せずにさまざまなデフォルトで実行できるようになり、テストの実行時にさまざまなデフォルト/モックデータを使用できるようになります。
プログラムを構成するために必要なすべての属性を含むある種のコンテナーを返すシングルトンを使用します。シングルトンに、シングルトンメンバーの呼び出しに影響を与える内部状態がない限り、パターンの使用に問題はありません。ステートレスの場合、シングルトンメンバーへの呼び出しは、何があっても、指定されたパラメーターのセットを使用して、常に同じ結果を生成する必要があることを意味します。このようにして、プログラム内の異なる場所での2つの呼び出しが、異なる方法でプログラムに影響を与えないことを保証できます。