gpt4 book ai didi

c++ - 依赖倒置和普遍依赖

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:17 27 4
gpt4 key购买 nike

我正在尝试获得依赖倒置,或者至少了解如何应用它,但我目前遇到的问题是如何处理普遍存在的依赖关系。典型的例子是跟踪日志记录,但在我的应用程序中,我有许多服务,如果不是所有代码,大多数代码都将依赖这些服务(跟踪日志记录、字符串操作、用户消息日志记录等)。

没有一个解决方案看起来特别可口:

  • 使用构造函数依赖注入(inject)意味着大多数构造函数将具有多个、许多标准注入(inject)依赖项,因为大多数类明确需要这些依赖项(它们不只是将它们传递给它们构造的对象)。
  • 服务定位器模式只是将依赖项驱动到地下,将它们从构造函数中移除但隐藏它们,这样就连需要依赖项都不是明确的
  • 单例服务就是单例,并且还用于隐藏依赖项
  • 将所有这些公共(public)服务集中到一个 CommonServices 接口(interface)中并注入(inject)该接口(interface) a) 违反得墨忒耳法则 b) 实际上只是服务定位器的另一个名称,虽然是一个特定的而非通用的。

有没有人对如何构建这些类型的依赖关系有任何其他建议,或者是否有任何上述解决方案的经验?

请注意,我并没有考虑特定的 DI 框架,事实上我们正在用 C++ 编程,并且会手动进行任何注入(inject)(如果确实注入(inject)了依赖项)。

最佳答案

Service locator pattern just drives the dependencies underground, Singleton services are, well, Singletons, and also serve to hide the dependencies

这是一个很好的观察。隐藏依赖项不会删除它们。相反,您应该解决一个类需要的依赖项的数量。

Using constructor dependency injection would mean that most of the constructors would have several, many, standard injected dependencies because most classes explicitly require those dependencies

如果是这种情况,您可能违反了 Single Responsibility Principle .换句话说,这些类可能太大而且做的事情太多。既然你在谈论日志记录和跟踪,你应该问问自己是否aren't logging too much .但一般来说,日志记录和跟踪是横切关注点,您不应该将它们添加到系统中的许多类中。如果您正确应用 SOLID原则,这个问题就消失了(如 here 所解释的)。

关于c++ - 依赖倒置和普遍依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057127/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com