Попытка понять, почему Laravel многие статические методы не считаются плохой практикой

Я очень смущен.

Я попросил нескольких разработчиков на Reddit просмотреть мои коды. Это выглядит так.

Template::load('register', array('error_message' => Language::translate('username_in_use'));

Итак, он загружает register.php, заменяет {error_message} на перевод. (Извините, это имя пользователя используется. Выберите другой.)

Они сказали, что слишком много статических вызовов - это плохая практика. Тем не менее они предлагают структуру Laravel, которая полностью избавляется от $this и использует статические вызовы.

Может кто-нибудь объяснить мне, как получилось, если это плохая практика, Laravel - это классная структура?

Ответ 1

Статическое состояние вездесущее и полностью разрушает тестируемость, поскольку вы не можете просто reset состояние. Кроме того, все может повлиять на состояние таким образом, что другие аспекты кода не могут предсказать, что приводит к потенциально непредсказуемому поведению.

Laravel 4 предотвращает это, используя статические "фасады". Эти фасады являются "синтаксическими кратковременными для разрешения IoC". Они обеспечивают как синтаксический сахар, так и предотвращают плотно связанный код.

Классы, разрешенные фасадами, могут быть изменены и позволяют вводить макетные системы или что угодно.

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

Повторяю, пожалуйста, подумайте над тем, чтобы не использовать фасады в глубине вашего домена.