Найти тему
Уйти в АйТи

Про DI и глобальные переменные

Про DI и глобальные переменные

Помню, как на моей «заре» js, лет 10-12 назад все вокруг говорили, как плохо делать один глобальный объект и через него взаимодействовать на фронтенде отовсюду - типа bad practices. Почти то же самое касается и бекенда - там DI ( Dependency Injection ) это - хорошо, а вот юзать один синглтон, который как SDK доступен отовсюду - это плохо, типа тестам мешает (которые еще и не пишут многие, или пишут моки и так, что потом удаляют, потому, что поддерживать ЭТО становиться оч сложно и дорого).

Итого, что имеем в 2022. Redux 😂 - это ничто иное, как window[’GLOBAL_STORE’], с нормальным интерфейсом доступа к нему. Этот интерфейс поддерживает как минимум операции изменения, подписки и middleware. Собственно, у меня что-то такое было в 2012-2013 на проекте angularjs 😉 Потому, что надо было много чего хранить, изменять и много откуда получать. Дриллинг пропсов был очень медленный и неудобный.

Что касается чрезвычайной необходимости DI, а также Interface fisrt подхода в целом - если у вас сервисный слой (что хорошо) + интерфейсы к нему (что может быть избыточно, но зависит от проекта), то тут на самом деле тоже все очень относительно - главное, чтобы было удобно, вы минимизировали кол-во багов, не делали лишней работы.

Видел я проект на Java (которую я пламенно люблю), где был Spring, а в нем MVC, при этом контроллер имел интерфейс, далее сервисный слой, который тоже имел интерфейс и далее слой репозиториев (хранение данных), он сам был интерфейс, который с помощью аннотаций к методам интерфейса и магии spring jdbc или spring data (вроде) превращался под капотом в запросы в БД. Так вот, все было как в учебнике, но настолько заморочено и сложно по факту, что чтобы внести небольшое изменение, добавляющее одно поле, надо было 3-4 файла поменять, что как по мне тумач. А проект был маленький и редко менялся, изучать его было сложно. Стоило оно того? Вопрос, все страдали и хотели не там много проваливаться, чтобы достать до запроса в бд.

Не призываю все делать на глобальных переменных и статических данных, но всегда выбирайте то, что удобно вашему проекту, а если кто-то этого не делает, то это может быть просто пока что. К слову, что касается констант и статических свойств и методов, то вот из как раз лучше через конфигурацию все же получать это прям 99%, что надо будет настраивать и захочется иметь все в едином месте.