
💬 В чем заключается риск использования глобальных переменных, особенно изменяемых?
Глобальные переменные — это те, которые мы размещаем вне функций или методов, доступные для любой части нашего кода для использования и изменения. Часто они приносят больше проблем, чем пользы. Вот почему:
🔹 Отслеживание изменений затруднено: определить, где была изменена переменная
🔹 Тестирование усложняется: предположим, мы тестируем новый и старый процессы оформления заказа. Если оба теста вмешиваются в один и тот же глобальный featureConfig, мы не сможем тестировать их независимо, не мешая один другому.
🔹 Проблемы с конкурентностью: когда несколько запросов пытаются одновременно читать или изменять
📌 Что делать? Dependency injection👇
Это метод, при котором мы предоставляем объекту его потребности извне, вместо того чтобы создавать их самостоятельно или брать из глобальных переменных.
Да, этот метод делает вещи немного более сложными, но он также упрощает поддержку кода, его тестирование и поиск ошибок.
С внедрением зависимостей настройка тестов для сценариев с включенными и отключенными функциями становится простой.
Но если наши глобальные переменные не изменяются, не требуют тестирования и должны работать именно так, то в этих ситуациях использование глобальных переменных может быть более предпочтительным.
Также, если мы используем глобальные переменные, которые изменяются во время выполнения, необходимо убедиться, что мы используем техники синхронизации.
Глобальные переменные — это те, которые мы размещаем вне функций или методов, доступные для любой части нашего кода для использования и изменения. Часто они приносят больше проблем, чем пользы. Вот почему:
🔹 Отслеживание изменений затруднено: определить, где была изменена переменная
featureConfig.NewCheckoutProcessEnabled
в вашем приложении, сложно, когда любая часть кода может её изменить.🔹 Тестирование усложняется: предположим, мы тестируем новый и старый процессы оформления заказа. Если оба теста вмешиваются в один и тот же глобальный featureConfig, мы не сможем тестировать их независимо, не мешая один другому.
🔹 Проблемы с конкурентностью: когда несколько запросов пытаются одновременно читать или изменять
featureConfig
, это может привести к несоответствиям (состояние гонки).📌 Что делать? Dependency injection
Это метод, при котором мы предоставляем объекту его потребности извне, вместо того чтобы создавать их самостоятельно или брать из глобальных переменных.
Да, этот метод делает вещи немного более сложными, но он также упрощает поддержку кода, его тестирование и поиск ошибок.
С внедрением зависимостей настройка тестов для сценариев с включенными и отключенными функциями становится простой.
Но если наши глобальные переменные не изменяются, не требуют тестирования и должны работать именно так, то в этих ситуациях использование глобальных переменных может быть более предпочтительным.
Также, если мы используем глобальные переменные, которые изменяются во время выполнения, необходимо убедиться, что мы используем техники синхронизации.