構成ファイル、レジストリ、およびデータベースのいずれかにさまざまなパラメーターを格納するプロジェクトを継承しました。これらのパラメーターのいずれかが必要な人は、ストアから直接読み取る (場合によっては書き込む) だけです。これは、またはもちろん、ばかげているので、最初に考えたのは、既存のコードをリファクタリングして、クライアントがパラメーターが格納されている場所を認識できないようにすることでした。各パラメーターのプロパティを持つ従来の AppSettings クラスを作成しました。ストアにはグローバル スコープが必要なので、スレッド セーフなシングルトンを作成しました。このクラスは、パラメーター値をフィールドに格納するのではなく、実際のストア (構成ファイル、レジストリ、またはデータベース) との間でパラメーター値を読み書きすることにより、アクセス ポイントとして機能します。最近では、シングルトンとグローバル状態の危険性についての話題を避けるのは困難です。
- 私のソリューションでは、テスト可能性以外にどのような問題が見られますか?
- 軽量の代替品は何ですか?パラメータを使用するオブジェクトごとにファクトリを作成することはできません (作業が多すぎます)。
- より重いリファクタリングを行う機会が得られるまで、シングルトンを使用することは許容できる妥協点として機能しませんか?
- シングルトン クラスのプロパティにゲッターしかない場合、それで問題ありませんか?
一部のパラメーターのストアが将来 (たとえば、レジストリからデータベースに) 変更されることが予想されるため、それがストアをシングルトン クラスの背後に隠す動機になりました。