Size: a a a

Node.js — русскоговорящее сообщество

2020 June 07

h

humanoid in Node.js — русскоговорящее сообщество
Денис Макаров
Всем привет. Хочется услышать экспертное мнение тех, кто работал с node на более менее крупных проектах.
Сталкивались ли с необходимостью использования IoC контейнеров? Если да, то каких?
Принято ли вообще в node использование dependency injection? Как вообще решается проблема "развязывания компонентов"?
Смотря, что подразумевается под "развязыванием компонентов” - decoupling?
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Денис Макаров
Всем привет. Хочется услышать экспертное мнение тех, кто работал с node на более менее крупных проектах.
Сталкивались ли с необходимостью использования IoC контейнеров? Если да, то каких?
Принято ли вообще в node использование dependency injection? Как вообще решается проблема "развязывания компонентов"?
я использую тайпскрипт и и принимаю интерфейсы зависимостей в параметры конструкторов.

есть и привычные для других языков библиотеки для DI — с декораторами и всем таким.

если же говорить о том как принято в ноде, то, к сожалению, в ноде принято бизнес-логику писать в контроллерах. о DI никто и не слышал.
источник

ДМ

Денис Макаров... in Node.js — русскоговорящее сообщество
humanoid
Ну люди, который приходит из всяких Java,С# конечно сразу ищут как заюзать DI контейнер.
Модули в node - вполне подходят для того, чтобы делать норм синглтоны
Дело скорее не в синглтонах,  а в том чтобы контроллер работал с интерфейсом слоя бизнес логики не зная о реализации.
источник

ДМ

Денис Макаров... in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
я использую тайпскрипт и и принимаю интерфейсы зависимостей в параметры конструкторов.

есть и привычные для других языков библиотеки для DI — с декораторами и всем таким.

если же говорить о том как принято в ноде, то, к сожалению, в ноде принято бизнес-логику писать в контроллерах. о DI никто и не слышал.
Этого я и боялся)) (непопулярность di)
источник

ДМ

Денис Макаров... in Node.js — русскоговорящее сообщество
Денис Макаров
Дело скорее не в синглтонах,  а в том чтобы контроллер работал с интерфейсом слоя бизнес логики не зная о реализации.
из ярких представителей - есть Nest, там DI из коробки
если не хочется брать такое, то есть inversify
источник

h

humanoid in Node.js — русскоговорящее сообщество
Денис Макаров
Дело скорее не в синглтонах,  а в том чтобы контроллер работал с интерфейсом слоя бизнес логики не зная о реализации.
Но у js динамическая типизация, тут нет интерфейсов. У дин. тип. есть свои плюсы и минусы. Не стоит переносить багаж прошлого опыта сюда.
Интефрейс понятие широкое. Когда ты юзаешь какие то методы из другого модуля - то по сути пользуешься его интерфейсом. Просто методов сокрытия мало и компилятор по ручкам не постучит, если кто то решит заюзать какую-то не “публичную” функцию
источник

h

humanoid in Node.js — русскоговорящее сообщество
Денис Макаров
Этого я и боялся)) (непопулярность di)
DI и DI контейнер это разные вещи - на всяк случай
источник

И

Илья | 😶 ☮️... in Node.js — русскоговорящее сообщество
Денис Макаров
из ярких представителей - есть Nest, там DI из коробки
если не хочется брать такое, то есть inversify
больной DI, поехавший там
источник

ДМ

Денис Макаров... in Node.js — русскоговорящее сообщество
humanoid
Но у js динамическая типизация, тут нет интерфейсов. У дин. тип. есть свои плюсы и минусы. Не стоит переносить багаж прошлого опыта сюда.
Интефрейс понятие широкое. Когда ты юзаешь какие то методы из другого модуля - то по сути пользуешься его интерфейсом. Просто методов сокрытия мало и компилятор по ручкам не постучит, если кто то решит заюзать какую-то не “публичную” функцию
а причем тут динамическая типизация? смысл DI - создать слабую связанность. Чтобы классы не знали о зависимостях других классов, типы тут не причем
источник

ДМ

Денис Макаров... in Node.js — русскоговорящее сообщество
humanoid
Но у js динамическая типизация, тут нет интерфейсов. У дин. тип. есть свои плюсы и минусы. Не стоит переносить багаж прошлого опыта сюда.
Интефрейс понятие широкое. Когда ты юзаешь какие то методы из другого модуля - то по сути пользуешься его интерфейсом. Просто методов сокрытия мало и компилятор по ручкам не постучит, если кто то решит заюзать какую-то не “публичную” функцию
Забыл обозначить, что конечно же планируется использовать typescript. Иначе вопрос бы даже не возник
источник

ДМ

Денис Макаров... in Node.js — русскоговорящее сообщество
Илья | 😶 ☮️
больной DI, поехавший там
где именно он поехавший?
источник

И

Илья | 😶 ☮️... in Node.js — русскоговорящее сообщество
Денис Макаров
где именно он поехавший?
мультипровайдеры где ?
источник

h

humanoid in Node.js — русскоговорящее сообщество
Денис Макаров
а причем тут динамическая типизация? смысл DI - создать слабую связанность. Чтобы классы не знали о зависимостях других классов, типы тут не причем
Ну DI -  внедрение зависимости. Ты например указываешь, что тебе нужен модуль A - const a = require(‘A’); И тебе чет там прилетает.
источник

И

Илья | 😶 ☮️... in Node.js — русскоговорящее сообщество
я его и забросил поэтому
Ещё какая-то подмена в контейнере происходит между сервисами (баг, который я хз как воспроизвести, мб руки из жопы)
источник

h

humanoid in Node.js — русскоговорящее сообщество
Денис Макаров
Забыл обозначить, что конечно же планируется использовать typescript. Иначе вопрос бы даже не возник
А можно вопрос для статистики. Зачем TS на сервере решили юзать?
источник

ТК

Таймураз Кайтмазов... in Node.js — русскоговорящее сообщество
humanoid
А можно вопрос для статистики. Зачем TS на сервере решили юзать?
кек
источник

꧁岡

꧁倫太郎 岡部꧂... in Node.js — русскоговорящее сообщество
humanoid
А можно вопрос для статистики. Зачем TS на сервере решили юзать?
чтобы не юзать js, очевидно
источник

ТК

Таймураз Кайтмазов... in Node.js — русскоговорящее сообщество
Типы ниспосланы богами
источник

ДМ

Денис Макаров... in Node.js — русскоговорящее сообщество
Илья | 😶 ☮️
я его и забросил поэтому
Ещё какая-то подмена в контейнере происходит между сервисами (баг, который я хз как воспроизвести, мб руки из жопы)
если быть честным, multi мне и в ангуляре понадобился всего один раз, а в несте не сталкивался с его необходимость(хотя с нестом опыт небольшой)
с багами в сервисах тоже не сталкивался
источник

h

humanoid in Node.js — русскоговорящее сообщество
🤦‍♂️ Но тогда же есть котлины, джавы, хаскели и прочее
источник