【问题标题】:Dependency injection and state setup依赖注入和状态设置
【发布时间】:2015-04-08 15:49:17
【问题描述】:

请问谁负责设置注入依赖的状态?

例如,当 A 类依赖于 B 类时,实例 A 负责设置实例 B 还是应该在其他地方完成?为什么?

我的问题更笼统,但我把具体情况放在这里: 我有一个 Context 类,它处理给定图表的交互和状态,例如您可以在两个系列之间切换。然而,这个类也通过将它们委托给其他(注入的)类来设置图表的外观和显示数据。当前 Context 构造函数根据其构造函数参数设置其依赖关系状态(例如:突出显示图表上的一个点,告诉要显示哪个系列等)。我不确定这种设计是否良好,并希望对正确的方式有更深入的了解。编程语言是 Javascript(如果重要的话)。

谢谢, 彼得

【问题讨论】:

    标签: dependency-injection


    【解决方案1】:

    当 A 类依赖于 B 类时,实例 A 负责设置实例 B 还是应该在其他地方完成?

    如果 A 负责设置 B,这将使 A 违反 Dependency Inversion Principle (DIP) 规定:

    高级模块不应依赖于低级模块。两者都应该 依赖于抽象。

    DIP 是依赖注入模式背后的驱动力。

    但是,如果 A 不能负责创建 B,那是谁呢?这个问题的答案是:Composition Root:

    组合根是应用程序中的(最好)唯一位置 其中模块组合在一起。

    使用组合根是使 A 和 B(以及图中的所有其他内容)免受对不同模块的依赖的唯一方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-07
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多