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