c++ - 依赖倒置原理 : trying to understand

标签 c++ design-patterns aggregation composition dependency-inversion

我正在学习设计模式及其相关内容(特别是 SOLIDDependency 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/

相关文章:

javascript - 如何设置 QWebChannel JS API 以在 QWebEngineView 中使用?

c++ - 需要继承类的对象在定义类之前可见

c# - 我可以在我的算法中使用哪种设计模式?

c# - ElasticSearch (Nest) 中的聚合

标记化字段上的 ElasticSearch 术语聚合

c++ - 袖套设置频率?

c++ - 在通过 Visual C++ 应用程序执行的 msi 安装上指定 norestart

c# - 设计模式场景——我应该使用哪个?

design-patterns - CUDA 设计模式

java - 无法使用 Java 代码获取 MongoDB 聚合中的 max _id 值