我知道你不能创建一个100%遵守依赖倒置原则的程序。我们所有人都在我们的程序中通过实例化字符串来违反它而不考虑它。由于String是一个类而不是数据类型,因此我们总是依赖于具体的类。
我想知道是否有任何解决方案(纯理论讲话)。由于String几乎是一个只有很少“泄漏”的黑盒子,并且具有复杂的背景算法,所以我不期望实际的实现:)
答案 0 :(得分:0)
该原则的目的是 not 以避免在类中创建实例,或避免使用“new”关键字。因此,实例化对象(或字符串)并不违反原则。
关于总是创建更高级别的抽象(例如接口或基类)以便注入它并促进更松散的耦合的原则 如果抽象已经合理,那么没有理由尝试改进它。通过交换字符串的实现你会获得什么好处?
几年前我实际上发布了这个问题(半相关):IOC/DI: Is Registering a Concrete Type a Code Smell?
那么 的原则是什么?它是关于编写高度关注自己职责的组件,并注入高度关注自己的职责的组件。这些组件在使用依赖注入框架和构造函数注入时通常是服务,但在执行其他类型的注入时也可以是数据类型(例如,方法注入)。
请注意,这些服务或数据类型不需要是接口或基类 - 它们绝对可以是具体类型而不违反原则。
答案 1 :(得分:0)
依赖性反转与对象的创建无关,它与高层/低层模块的依赖性以及谁定义域(对象和接口)有关。
您正在谈论依赖注入,它是控制反转原理的子部分。