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

<
От версии < 3.1 >
отредактировано Alexandr Fokin
на 2020/07/12 19:29
К версии < 8.1 >
отредактировано Alexandr Fokin
на 2020/07/14 11:02
>
Изменить комментарий: К данной версии нет комментариев

Комментарий

Подробности

Свойства страницы
Название
... ... @@ -1,1 +1,1 @@
1 -Внедрение зависимостей | Dependency injection
1 +JS Внедрение зависимостей | JS Dependency injection
Теги
... ... @@ -1,1 +1,1 @@
1 -DI
1 +DI|js
Содержимое
... ... @@ -13,6 +13,7 @@
13 13  Вопрос абстракции.
14 14  Нет возможности определить интерфейс.
15 15  Как вариант определять класс без логики. Методы могут быть пустими и бросать ошибку: метод не реализован. Потомок либо переопределит метод либо получит ошибку при вызове.
16 +В пустом классе определить статичное поле - имя абстракции, которое будет использоваться для регистрации и разрешения зависимости.
16 16  
17 17  
18 18  Схожим образом можно интегрироваться с фреймворком типа React:
... ... @@ -22,4 +22,8 @@
22 22  
23 23  
24 24  
26 +Для создания ServieLocator использовалась библитеока di-xxl. Как показывает практика библиотека не умеет самостоятельно анализировать конструктор и определять необходимые для экземпляра зависимости. Как вариант можно явно прописать список параметров, передаваемых в конструктор, в блоке регистрации зависимости. Но на мой взгляд, более хорошим решением является разрешение зависимостей через ServieLocator в конструкторе базового класса. В таком случае список зависимостей определен в самом классе, а не в блоке регистрации зависимостей.
27 +(Возможно в данном варианте можно обойтись и без библиотеки di-xx. Сделав свое Key-Value хранилище привязок и поддержку singlethon)
25 25  
29 +Также хочу отметить важность создания строковых переменных с именами условных интерфейсов (привязок для внедрения). Чтобы в случае переименования интерфейса было достаточно заменить одну строковою переменную. А не искать по коду: где именно внедрялася данный интейс, чтобы изменить имя разрешения зависимости.
30 +