Задать вопрос
@Mr-Governor
Губернирую

Какое преимущество при использовании внедрения зависимости?

Всем привет.
Изучая NestJS, тему: Провайдеры.
Прочитал что провайдер - класс который (благодаря декоратору @Injectable) можно внедрять как зависимость в другие классы.

То есть, вместо этого:
export class Service1 {
    private prop: PropType;

    constructor() {
        this.prop = new PropType();
    }
}


Получаем такой код:
export class Service2 {
    constructor(private prop: PropType) {}
}


Но вот только я не понимаю в чем преимущество такого подхода, ведь экономится одна строчка, или я чего-то не понимаю и есть еще преимущества?
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 5
@KingstonKMS
Например, есть класс логгера. Вместо создания отдельного экземпляра логгера в разных классах, вы можете создать один экземпляр и внедрять его где необходимо.
Также например класс работы с базой данных или внешним сервисом.
Ответ написан
yarkov
@yarkov
Помог ответ? Отметь решением.
https://habr.com/ru/post/651139/
Почитайте на досуге как устроен Nest изнутри
Ответ написан
Комментировать
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
В твоем примере зависимость создается внутри класса, а в примере выше зависимость уже создана и передается в класс при создании его экземляра.

В Ангуляре и Несте созданием заведует инжектор, который не просто создает, а следит еще за дочерними зависимостями и создает их тоже, в момент когда понадобились.

Так же di предоставляет больше гибкости, инжектор это своего рода внешняя переменная, которую можно подменить. Что удобно при тестировании или при использовании в контексте.
Ответ написан
Комментировать
Представь, что для создания экземпляра класса propType тебе требуется 50 мб оперативной памяти. И ты будешь делать это каждый раз, когда тебе понадобится этот класс в каком либо сервисе. При использовании DI, инжектор (контейнер зависимостей) сделает это один раз, и в последующих вызовах в различных службах ты будешь получать в конструкторе уже готовый и единственный объект экземпляра класса propType. Надеюсь, объяснился понятно.
Ответ написан
Комментировать
MisterN
@MisterN
Ну знаете, паттерны, solid, инверсия зависимостей и всякое такое.
PropType тоже может иметь зависимости, которые внезапно потребуют зависимости.
Про Нестю не скажу, а в ангуларе еще и тришейкинг зависимостей есть. Правда не уверен, что он сейчас работает также, как и раньше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы