Редактировал(а) Alexandr Fokin 2023/01/06 17:11

<
От версии < 6.1 >
отредактировано Alexandr Fokin
на 2020/07/14 10:05
К версии < 2.1 >
отредактировано Alexandr Fokin
на 2020/07/12 19:26
>
Изменить комментарий: К данной версии нет комментариев

Комментарий

Подробности

Свойства страницы
Название
... ... @@ -1,1 +1,1 @@
1 -JS Внедрение зависимостей | JS Dependency injection
1 +Внедрение зависимостей | Dependency injection
Теги
... ... @@ -1,1 +1,1 @@
1 -DI|js
1 +DI
Содержимое
... ... @@ -4,7 +4,7 @@
4 4  Для внедрения зависимостей в JS можно использовать следующую схему.
5 5  
6 6  1) Создаем класс ServieLocator. В нем будут содержаться все зависимости и метод для получения зависимости.
7 -2) Создаем BaseClass, который:
7 +2) Создаем базовый класс, который:
8 8  Содержит статичный экземпляр ServieLocator.
9 9  В конструкторе принимает список зависимостей.
10 10  При выполнении конструктора запрашивает все необходимые зависимоти и бросате ошибку, если зависимость не найдена.
... ... @@ -13,15 +13,10 @@
13 13  Вопрос абстракции.
14 14  Нет возможности определить интерфейс.
15 15  Как вариант определять класс без логики. Методы могут быть пустими и бросать ошибку: метод не реализован. Потомок либо переопределит метод либо получит ошибку при вызове.
16 -В пустом классе определить статичное поле - имя абстракции, которое будет использоваться для регистрации и разрешения зависимости.
17 17  
18 18  
19 -Схожим образом можно интегрироваться с фреймворком типа React:
20 -Создать BaseReactComponent, от которого будут наследоваться все компоненты.
21 -Базовый BaseReactComponent будет создавать экземпляр BaseClass, который выполнит иницилизацию зависимостей, а после полученные зависимости можно скопировать из BaseClass в BaseReactComponent.
22 -При этом BaseReactComponent пробрасывает возможности конструктора BaseClass, позволяя передать массив необходимых зависимостей.
23 23  
24 24  
25 25  
26 -Для создания ServieLocator использовалась библитеока di-xxl. Как показывает практика библиотека не умеет самостоятельно анализировать конструктор и определять необходимые для экземпляра зависимости. Как вариант можно явно прописать список параметров, передаваемых в конструктор, в блоке регистрации зависимости. Но на мой взгляд, более хорошим решением является разрешение зависимостей через ServieLocator в конструкторе базового класса.
27 27  
22 +