Инверсия управления и внедрение зависимостей в Node.js

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ส.ค. 2024
  • Инверсия управления: github.com/How...
    Внедрение зависимостей: github.com/How...
    Курс «Основы программирования» с примерами на JavaScript habr.com/ru/po...
    #javascript #IoC #DI #инверсия #управления #injection #dependency #лекции #js #программирование

ความคิดเห็น • 21

  • @artavazdavagyan
    @artavazdavagyan 2 ปีที่แล้ว +2

    наконец то я понял что такое Инверсия управления. огромное вам спасибо

  • @renatn8484
    @renatn8484 4 ปีที่แล้ว +16

    определение DI дошло только в последние 5 минут, когда шло сравнение с dependency look up, после этого стала понятнее больше сама презентация. может стоит как то четче начинать саму презентацию с определения. Один слайд например ну и плюс какую нить картинку для визуализации - так легче воспринимать, чем просто речь на фоне слайда.

  • @ellisdos6714
    @ellisdos6714 3 ปีที่แล้ว +2

    со второго просмотра зашло, код интересный, очень много интересных идей

  • @TimurSevimli
    @TimurSevimli ปีที่แล้ว +1

    Спасибо вам огромное!

  • @andreymaslikov3901
    @andreymaslikov3901 3 ปีที่แล้ว +1

    Добрый день, переданная в setTimeout лямбда не обернётся, потому что она не последняя из аргументов "args[args.length - 1] = (...args) => {} " про это вы говорите тут 29:17

    • @timashoff
      @timashoff ปีที่แล้ว

      так и есть, контракт у таймеров в js не callback last

  • @user-vx9ug1nb2t
    @user-vx9ug1nb2t 4 ปีที่แล้ว

    Здравствуйте Тимур. В лекции вы приводите такой пример (на 18 минуте): системный код передает прикладному какую-нибудь библиотеку или функцию, в прикладном коде вокруг метода библиотеки/функции можно сделать обёртку, и если в системном коде вызвать этот же метод/функцию, то из кода обёртки можно поменять что-то в контексте системного кода. У меня возник большой вопрос как это сделать, ведь стрелочная функция берёт контекст (this) в том месте где была объявлена, а для function expression контекстом будет объект в котором она вызовется. То есть в любом случае до глобального контекста в системном коде не получается добраться. Или я чего-то не учитываю?

  • @timashoff
    @timashoff ปีที่แล้ว +1

    Спасибо, сложно, надо пересмотреть и переварить через месяц-другой

  • @user-ex5wp9mh3x
    @user-ex5wp9mh3x ปีที่แล้ว

    Здравствуйте!
    Как можно организовать запуск всех файлов проекта в одном контексте vm и как при этом делать пробросы модулей с помощью инъекций из фреймворка в несколько файлов?
    И как такое можно организовать с паттерном MVC?
    Или нужно в таком случае каждому роуту, контроллеру и каждой модели создавать свой vm контекст и каждый раз делать новые инъекции модулей?

  • @dmytrohaponov5517
    @dmytrohaponov5517 2 ปีที่แล้ว +1

    В офф доке ноды по поводу VM модуля пишут следующее с первых строк - The vm module is not a security mechanism. Do not use it to run untrusted code. как это понимать? Мне с Vm модулем просто еще не приходилось работать

    • @TimurShemsedinov
      @TimurShemsedinov  2 ปีที่แล้ว +1

      Так и есть, код, которому вы не доверяете вообще должен запускаться в более крепких контейнерах, лучше виртуалках, но можно и докере, хотя докер это тоже не секьюрити механизм.

  • @grenadier4702
    @grenadier4702 ปีที่แล้ว

    17:28 а если написать delete api.console.log , не удалит во всех песочницах? Почему так?
    И правильно ли я поинмаю, что если что-то встроить в global, например, глобальный конфиг-файл, то это тоже своего рода di?
    global.config. {
    ....
    }

  • @azatbagautdinov1792
    @azatbagautdinov1792 5 ปีที่แล้ว +1

    Можно ли сказать, что внедрение зависимостей исползуется для повышения абстракции на уровне модулей?

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว +2

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

  • @user-vx9ug1nb2t
    @user-vx9ug1nb2t 4 ปีที่แล้ว

    Тимур, ещё скажите, пожалуйста, является ли паттерн фасад примером инверсии управления.

    • @TimurShemsedinov
      @TimurShemsedinov  4 ปีที่แล้ว +1

      Нет, и мне даже непонятно, почему такое могло подуматься

    • @user-vx9ug1nb2t
      @user-vx9ug1nb2t 4 ปีที่แล้ว

      @@TimurShemsedinov я подумал, что ПОЛУЧЕНИЕ кодом в файле application.js ссылки на библиотеку, например, fs и есть передача управления коду в этом файле над библиотекой fs. Я сравнил это с фасадом, ведь там тоже экземпляр одного класса получает возможность пользоваться методами другого класса.

    • @user-vx9ug1nb2t
      @user-vx9ug1nb2t 4 ปีที่แล้ว

      @@TimurShemsedinov выходит, что нужно смотреть с другого конца. Скажите, пожалуйста, вот такой код будет являться инверсией управления.
      const a = {...};
      const b = {...};
      const framework = (obj) => b.someMethod(obj);
      framework(a);

  • @delimobilstories6781
    @delimobilstories6781 4 ปีที่แล้ว

    Небольшой вопрос по присваиванию значения null коллбэку в примере с внедрением зависимостей. Вы сказали, что null присваивается для избежания выбрасывания исключения. Мне недавно приходилось работать с блоком кода, обернутым в try - catch - finally. Он выполнялся правильно только в том случае, если ключевая переменная скрипта не была равна undefined. В случае, если все же была равна, критичного для работы программы ничего не происходило, но выбрасывалась ошибка. Чтобы избежать ее, я в блоке catch присвоил null переменной error. Можно ли считать такой подход правильным?