我正在学习设计模式及其相关内容(特别是 SOLID 和 Dependency inversion principle),看起来我正在失去一些东西:
遵循 DIP 规则,我应该能够通过不在类中创建对象(组合)而是将对象引用/指针发送到类构造函数(聚合)。但这意味着我必须在其他地方创建一个实例:所以一个具有聚合的类越灵活,另一个就越脆弱。
请解释我哪里错了。
最佳答案
您只需要遵循这个想法,直到得出合乎逻辑的结论。是的,您必须在其他地方制作实例,但这可能不仅仅是在您的类(class)之上一层的类(class)中,它一直需要被推出和推出,直到对象仅在您的应用程序的最外层创建。
理想情况下,您可以在一个地方创建所有对象,这称为 composition root (异常(exception)是从工厂创建的对象,但工厂是在组合根中创建的)。具体位置取决于您构建的应用类型。
- 在桌面应用程序中,这将在 Main 方法中(或非常接近它)
- 在 ASP.NET(包括 MVC)应用程序中,这将在 Global.asax 中
- 在 WCF 中,这将在 ServiceHostFactory 中
- 等等
这个地方可能最终变得“脆弱”,但您只有一个地方可以更改内容以便能够重新配置您的应用程序,然后所有其他类都是可测试和可配置的。
参见 this excellent answer (上面引用)
关于c++ - 依赖倒置原理 : trying to understand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28706226/