Где хранить глобальные переменные? Где, с точки зрения грамотной архитектуры, хранить глобальные переменные? Ради большей чёткости вопроса, опишу остальные условия задачи, хотя многие наверное по умолчанию бы их подразумевали. Остальные условия такие: * ООП; * в первую очередь, интересует специфика web-приложений построенных согласно MVC-архитектуре. Пример кода на PHP:class Registry { private static $_data = array(); /** * Установить переменную * @return true/false */ public static function set($key, $value) { if(array_key_exists($key,self::$_data)){ return false; } self::$_data[$key] = $value; return true; } /** * Получить переменную * @return value/null */ public static function get($key) { if( !array_key_exists($key, self::$_data) ){ return null; } return self::$_data[$key]; } /** * Удалить переменную */ public static function delete($key) { unset(self::$_data[$key]); } } Будет ли такой вариант хорошим? Может есть способ проще и изящней? Может можно вовсе обойтись без глобальных переменных? Прошу делиться опытом.
Согласно принципам хорошей архитектуры, использование глобальных переменных следует минимизировать или вовсе избегать. Глобальные переменные делают код менее предсказуемым, усложняют его тестирование и поддержку.
В случае web-приложений, построенных на основе MVC-архитектуры, рекомендуется использовать модели для хранения и управления данными, контроллеры для обработки запросов и взаимодействия с моделями, а представления для отображения данных пользователю.
Вместо глобальных переменных можно использовать зависимости внутри классов (dependency injection) или использовать шаблон Singleton для создания единственного экземпляра класса, который будет хранить общие данные.
В вашем примере класс Registry представляет собой простой вариант реализации паттерна Singleton для хранения данных. Однако, стоит учитывать, что такой подход может привести к злоупотреблению и созданию глобального состояния, что усложнит отслеживание потоков данных в приложении.
Лучшим решением может быть использование более специфичных инструментов для управления состоянием, таких как библиотеки управления состоянием (например, Redux для JavaScript), которые позволяют структурировать данные и их изменение в приложении.
В целом, старайтесь избегать использования глобальных переменных в вашем коде и предпочитайте передачу данных через параметры методов, возвращаемые значения методов или использование специализированных инструментов для управления состоянием при необходимости.
Согласно принципам хорошей архитектуры, использование глобальных переменных следует минимизировать или вовсе избегать. Глобальные переменные делают код менее предсказуемым, усложняют его тестирование и поддержку.
В случае web-приложений, построенных на основе MVC-архитектуры, рекомендуется использовать модели для хранения и управления данными, контроллеры для обработки запросов и взаимодействия с моделями, а представления для отображения данных пользователю.
Вместо глобальных переменных можно использовать зависимости внутри классов (dependency injection) или использовать шаблон Singleton для создания единственного экземпляра класса, который будет хранить общие данные.
В вашем примере класс Registry представляет собой простой вариант реализации паттерна Singleton для хранения данных. Однако, стоит учитывать, что такой подход может привести к злоупотреблению и созданию глобального состояния, что усложнит отслеживание потоков данных в приложении.
Лучшим решением может быть использование более специфичных инструментов для управления состоянием, таких как библиотеки управления состоянием (например, Redux для JavaScript), которые позволяют структурировать данные и их изменение в приложении.
В целом, старайтесь избегать использования глобальных переменных в вашем коде и предпочитайте передачу данных через параметры методов, возвращаемые значения методов или использование специализированных инструментов для управления состоянием при необходимости.