Как работает Dependency Inversion в таком случае? - PullRequest
0 голосов
/ 02 мая 2019

Доброе утро,

Я читал книгу Роберта Мартина об архитектуре программного обеспечения и, в частности, принципах 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());
  }

}

Да, мы определили интерфейс для всех плагинов, но мы не можем выдвинуть их без зависимости от них, верно?

Так как же применить принцип инверсии зависимости в этом случае? Как использовать плагины без зависимостей?

1 Ответ

0 голосов
/ 02 мая 2019

Вместо этого, если импортировать их, создайте плагины в другом месте и вставьте их в конструктор для A

class A {

  private plugins: Plugin[] = [];

  construct(pluginsToUse) {
    plugins = pluginsToUse;
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...