【问题标题】:Dependency Inversion Principle And "String"依赖倒置原则和“字符串”
【发布时间】:2019-03-26 18:39:54
【问题描述】:
我知道你不能创建一个 100% 遵守依赖倒置原则的程序。我们所有人都在我们的程序中通过实例化字符串来违反它而不考虑它。由于 String 是一个类而不是数据类型,我们总是依赖于一个具体的类。
我想知道是否有任何解决方案(纯理论上)。由于 String 几乎是一个几乎没有“泄漏”的黑盒,并且具有复杂的背景算法,因此我不希望有一个实际的实现:)
【问题讨论】:
标签:
string
inversion-of-control
theory
dependency-inversion
【解决方案1】:
该原则的意图是不是避免在类中创建实例,或者避免使用“new”关键字。因此实例化对象(或字符串)并不违反原则。
该原则也不是关于始终创建更高级别的抽象(例如接口或基类)以注入它并促进更松散的耦合。如果抽象已经合理,则没有理由尝试对其进行改进。换掉字符串的实现,你会得到什么好处?
我实际上在几年前发布了这个问题(半相关):IOC/DI: Is Registering a Concrete Type a Code Smell?
那么是的原理是什么?这是关于编写高度关注自身职责的组件,以及注入高度关注他们自己职责的组件。这些组件在使用依赖注入框架和构造函数注入时通常是服务,但在进行其他类型的注入(例如方法注入)时也可以是数据类型。
请注意,这些服务或数据类型并不要求是接口或基类——它们绝对可以是具体类型而不违反原则。
【解决方案2】:
依赖反转与对象的创建无关,它与高级/低级模块依赖关系以及定义域(对象和接口)的人有关。
您说的是依赖注入,它是控制反转原则的一个子部分。