【发布时间】:2018-11-07 21:53:25
【问题描述】:
我在工作中与某人进行了讨论。类和接口如下所示:
public interface ISomeInterface { }
public class ImplementationOfInterface : ISomeInterface { }
public class ClassThatUsesInterface {
private ISomeInterface _interface;
public ISomeInterface Interface {
get => _interface ?? new ImplementationOfInterface();
set => _interface = value;
}
}
99% 的时间我们会使用ImplementationOfInterface。最后 1% 可能是单元测试的目的。
我已经尝试阅读依赖注入、依赖倒置原则、服务、SOLID 以及更多不相关的内容,如服务定位器模式/反模式、两步初始化反模式等,但没有找到任何人描述这样做的方式。
违反了 SOLID 中的 D 已半明半白; 《依赖倒置原则; 一个人应该“依赖于抽象,[而不是]具体化。”。因为在单元测试中覆盖它或者如果你愿意的话切换实现是相当容易的......这让我更加困惑......
即使它可能与 SOLID 中的 D 相冲突,并且在正确的依赖注入之后并没有真正做任何事情,但真的很难反对这种用法。
我个人建议通过构造函数注入实例,但同事认为这样的工作量太大,看不到好处。老实说,我很难不同意,但我仍然对此有不好的预感..
你能提出文章或有力的论据来支持和反对使用这种特殊的“黑客”吗?
【问题讨论】:
-
注意 SOLID 中的 S 也是踩到的,尤其是当 ImplementationOfInterface 为 IDisposable 或有构造参数时。管理生命周期或依赖关系不是 ClassThatUsesInterface 的任务。
标签: c# oop design-patterns architecture