構成値へのアクセス(読み取り/書き込み)を担当するプラットフォーム/ファウンデーションコンポーネント(.NETアセンブリのセット)を作成しています。このコンポーネントは、プラットフォーム上に作成される他のコンポーネントによって使用されます。
このコンポーネントは、消費者にとって使いやすく、しかも高いテスト性と保守性を備えている必要があります。現在の設計では、いくつかのメソッド(GetKeyValueSettingなど)を含む静的クラス(ConfigurationManager)があります。このConfigurationManagerクラスは、ローカルの.NET .configファイルからだけでなく、SharePointリスト(一部のコンポーネントは共有SharePoint環境でホストされている)から、さらには別の共有構成値ストアからも構成値を取得できるという点で特別です。 。Managerは、優先順位を付けて複数の場所から読み取ることができる必要があります。
- SharePointで実行している場合:1。SharePointSettingsProvider、2。SharedStoreSettingsProvider
- SharePointで実行されていない場合:1。ConfigFileSettingsProvider 2. SharedStoreSettingsProvider
静的クラスは、テスト容易性、拡張性などに関して多くの問題を引き起こすことを知っているので、それを使用したくありません。私の次の選択肢はシングルトンですが、前述の-ilitiesに関しては、これはそれほど良い解決策ではありません。より良い解決策のためのアイデアはありますか?
私の現在のデザインは次のとおりです。
public static class ConfigurationManager
{
// internal for testability
internal IEnumerable<ISettingsProvider> SettingsProviders {get;set;}
// internal for testability
internal ISettingsProviderFactory ProvidersFactory {get;set;}
public static string GetKeyValueSetting(string key)
{
}
}
public interface ISettingsProvider
{
string GetKeyValueSetting(string key);
}
public class ConfigFileSettingsProvider : ISettingsProvider
{
}
public class SharePointSettingsProvider : ISettingsProvider
{
}
public class SharedStoreSettingsProvider : ISettingsProvider
{
}
public interface ISettingsProviderFactory
{
IEnumerable<ISettingsProvider> GetProviders();
}