Ответ
Да, был случай на проекте, где технический лидер настаивал на использовании глобального массива для хранения конфигурации приложения. Я считал, что это создаст проблемы с тестируемостью и может привести к трудноуловимым багам при параллельных запросах.
Я подготовил аргументы и альтернативное решение:
- Проблемы глобального состояния: сложность тестирования, race conditions в многопоточных средах
- Предложил решение: паттерн Registry или простой класс-обертку с статическим доступом
- Привел пример кода, показывающий обе реализации
Исходный подход:
// Глобальная переменная
$GLOBALS['config'] = ['db_host' => 'localhost'];
Мое предложение:
class ConfigRegistry {
private static array $config = [];
public static function set(string $key, $value): void {
self::$config[$key] = $value;
}
public static function get(string $key) {
return self::$config[$key] ?? null;
}
}
// Использование: ConfigRegistry::get('db_host');
В результате обсуждения мы пришли к компромиссу: использовали Dependency Injection контейнер, который решал те же проблемы, но был более стандартным для нашего фреймворка. Руководство оценило техническую аргументацию, и мы внедрили более надежное решение.