Использование глобальной переменной для предотвращения повторного выполнения кода без необходимости - PullRequest
0 голосов
/ 24 января 2020

TL; DR: Это плохая практика - использовать глобальную переменную для предотвращения ненужного выполнения кода, и если да, то каковы альтернативы?

У меня есть приложение Electron, которое читает поток данных в реальном времени из другого приложения и выводит некоторые его элементы на экран.

Существует два типа полученных данных: данные в реальном времени (телеметрия) о том, что происходит в данный момент, и дополнительные данные c, которые обновляются каждые несколько секунд (sessionInfo).

Первый При получении пакета sessionInfo мне нужно расположить и определить размер некоторых элементов пользовательского интерфейса в соответствии с некоторыми данными в нем. Эти данные определенно не изменятся в ходе использования приложения, поэтому я не хочу, чтобы вычисления, основанные на них, выполнялись более одного раза *. Мне нужно прослушивать все пакеты sessionInfo, есть и другие вещи, которые я делаю с ними при получении, именно эта конкретная c часть данных должна рассматриваться только один раз.

Учитывая вышесказанное, является ли это сценарием, в котором было бы целесообразно использовать глобальную переменную для хранения этой информации (или даже просто флаг, чтобы сказать, что эта информация была обработана) и использовать ее для препятствовать выполнению кода несколько раз? Все мои чтения показывают, что глобальные переменные никогда не были хорошей идеей, но, если не допустить повторного выполнения этого кода, я не уверен, какие у меня есть альтернативы.

* Я признаю, что разрешение этого, вероятно, не будет иметь никакого практического значения для моего приложения, но это для меня опыт обучения, а также создание чего-то полезного, поэтому я хотел бы понять «правильный» подход, а не просто выискивать что-то неэффективное вместе и делать это работает.

1 Ответ

0 голосов
/ 24 января 2020

Глобальные переменные обычно являются плохой практикой по многим причинам, таким как:

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

Лучшей практикой является создание одноэлементных сервисов. Например, вы можете создать класс SessionService, который обрабатывает все ваши аутентификационные данные. Или, возможно, DataStreamService, который содержит переменные состояния вашего потока данных. Чтобы получить доступ к этому синглтону, вы должны импортировать его в тот файл, в котором он нужен. Некоторые фреймворки go еще дальше и имеют единое глобальное хранилище данных, например response / redux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...