- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
真正 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 程度取决于我,但我想知道这是否通常是一条可行的道路,因为基本概念的性质,或者这是否是不是规则的异常(exception),而是严重的违规行为。
最佳答案
你说的是 Dependency Inversion principle .这个原则并没有说你根本不应该新建对象,但它区分了两种类型的对象。实现行为的对象(服务)和包含数据的对象(DTO、值类型、实体)。
不更新 DTO 是相当愚蠢的,因为没有要抽象的行为。它们只包含数据。 (就像将 IPerson
接口(interface)添加到 Person
DTO 一样愚蠢)。
Miško Hevery 称它们为 injectables and newables ,这是一个很好的术语。
有关详细信息,请参阅此 Stackoverflow 问题:Why not use an IoC container to resolve dependencies for entities/business objects?
关于c# - 固体 : Same-class constructor call allowed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11023579/
我是一名优秀的程序员,十分优秀!