真正 SOLID 代码的一个重要特性是构造函数调用并不经常发生在实际应用程序代码中,而是主要在必要的组合根和工厂方法中发生。这对我来说很有意义,我会尽可能地坚持这一点。
我创建了一个简单的类,在我看来,它不仅是允许的,而且实际上是正确的,可以偏离上述规则。这抽象了一些简单的 Registry 查询,以方便对其他一些代码进行单元测试:
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()
方法实际上在不使用工厂的情况下创建了同一个类的实例,但是由于 Registry 呈现的封闭概念,我实际上似乎不希望返回任何看起来像 Registry 键的东西,但实际上确实可以正常工作的东西与当前对象相同。
我知道最终取决于我想要工作的 SOLID 程度,但我想知道由于基本概念的性质,这通常是否是可行的路径,或者这是否不是例外遵守规则,但实际上违反了 SOLID。