首页 > 解决方案 > 在这种情况下,依赖倒置如何工作?

问题描述

早上好,

我一直在阅读 Robert Martin 写的关于软件架构和 SOLID 原则的书,但我无法理解依赖倒置是如何工作的。

简单的例子,是的,它们很清楚,比如https://www.oodesign.com/dependency-inversion-principle.html

但是当我们有一个插件系统时,父级必须知道所有插件并加载它们,那么如何避免父级对其插件的依赖呢?

例子:


/*
// In plugins file below
class PluginA { }
class PluginB { }
*/

import { PluginA, PluginB } from '../plugins';

class A {

  private plugins: Plugin[] = [];

  construct() {
    plugins.push(new PluginA(), new PluginB());
  }

}

是的,我们为所有插件定义了一个接口,但是我们不能在没有依赖它们的情况下推送它们,对吧?

那么在这种情况下如何应用依赖倒置原则呢?如何使用没有依赖关系的插件?

标签: ooparchitecture

解决方案


相反,如果导入它们,请在其他地方构造插件并将它们注入 A 的构造函数

class A {

  private plugins: Plugin[] = [];

  construct(pluginsToUse) {
    plugins = pluginsToUse;
  }

}

推荐阅读