我想问一下谁负责设置注入依赖关系的状态?
例如,当A类依赖于B类时,实例A是设置实例B的责任还是应该在其他地方完成?为什么呢?
我的问题更为一般,但我在这里提出具体情况: 我有一个Context类来处理给定图表的交互和状态,例如你可以在两个系列之间切换。但是,这个类还通过将它们委托给其他(注入)类来设置图表的外观和显示数据。目前,Context构造函数根据其构造函数参数设置其依赖关系状态(例如:突出显示图表上的一个点,告诉要显示哪个系列等)。我不确定这种设计是否合适,并希望对正确的方法有更深入的了解。编程语言是Javascript(如果它很重要)。
谢谢, 彼得
答案 0 :(得分:1)
当A类依赖于B类时,实例A是设置实例B的责任还是应该在其他地方完成?
如果A负责设置B,这将使A违反Dependency Inversion Principle(DIP)说:
高级模块不应该依赖于低级模块。两者都应该 取决于抽象。
DIP是依赖注入模式的驱动力。
但如果A不能负责创造B,那么谁呢?这个问题的答案是:Composition Root:
组合根是应用程序中的(最好)唯一位置 模块组合在一起。
使用Composition Root是唯一可以让A和B(以及图中的其他所有内容)不依赖于不同模块的方法。