実際のSOLIDコードの重要な特性は、コンストラクター呼び出しが実際のアプリケーションコード内では発生しないことが多く、必要に応じて主にコンポジションルートメソッドとファクトリメソッドで発生することです。これは私にとって非常に理にかなっています、そして私はできる限りこれを守ります。
私は、許可されているだけでなく、実際には上記の規則から逸脱することが正しいと思われる単純なクラスを作成しました。これにより、いくつかの単純なレジストリクエリが抽象化され、他のコードの単体テストが容易になります。
public class RegistryKeyProxy : IRegistryKey
{
private RegistryKey registrykey;
public RegistryKeyProxy(RegistryKey registrykey)
{
this.registrykey = registrykey;
}
public IRegistryKey OpenSubKey(string subKeyName)
{
var subkey = this.registrykey.OpenSubKey(subKeyName);
return (null == subkey ? null : new RegistryKeyProxy(subkey));
}
public IEnumerable<string> GetSubKeyNames()
{
return this.registrykey.GetSubKeyNames();
}
public object GetValue(string valueName)
{
return this.registrykey.GetValue(valueName);
}
}
このOpenSubKey()
メソッドは、実際にはファクトリを使用せずにこの同じクラスのインスタンスを作成しますが、レジストリが提示する閉じた概念のため、レジストリキーのように見えるものを返さないことが実際には望ましいように見えますが、実際には正確に機能するものです。現在のオブジェクトと同じ方法です。
結局のところ、私がどのように堅実に働きたいかは私次第ですが、基本的な概念の性質のために、これが一般的に実行可能な道であるかどうか、またはこれが例外ではないかどうかを知りたいですルールに準拠していますが、実際にはSOLID違反です。