Почему свойства запроса / запроса / атрибутов / ... общедоступны в Symfony2? - PullRequest
0 голосов
/ 01 мая 2011

Почему не добытчики?И как это сочетается с принципом инкапсуляции?Это безопасно?

Upd: Да, я о Request.Безопасность: я имею в виду, что любой в коде (с помощью слушателя) может сделать $request->attributes = null;

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Если вы говорите об объектах Request и Response , об этом говорилось в списке рассылки разработчиков Symfony несколько дней назад.Я приглашаю вас взглянуть на это здесь .

Почему не добытчики?Не уверен, что на этот вопрос есть однозначный ответ, но я думаю, что это решение, основанное главным образом на личных вкусах.

Это нарушает инкапсуляцию?Не совсем по моему мнению для этого конкретного случая.Мое рассуждение состоит в том, что на данный момент никакой специальной логики не выполняется для различных объектов, которые сейчас являются публичными.Таким образом, в конце концов, вы должны получить объект через геттер и прочитать или изменить его напрямую.Нет большой разницы с извлечением объекта с использованием открытого свойства.

// With Getters
$parameterBag = $request->getQuery();
$parameterBag->get('key');

// With Public Properties
$parameterBag = $request->query;
$parameterBag->get('key');

Инкапсуляция должна выполняться, когда необходимо убедиться, что свойство имеет определенное значение или формат.Например, скажем, у вас есть класс со свойством cost, и это свойство никогда не должно быть отрицательным.Поэтому, если свойство cost было общедоступным, можно установить отрицательное значение, выполнив что-то вроде $receipt->cost = -1;.Однако, если вы сделаете его закрытым, а пользователь класса сможет установить его только через установщик, то вы можете убедиться, что стоимость никогда не будет ниже 0, выполнив некоторую специальную проверку в коде установщика.

В нашем случае речь идет об объекте коллекции, точнее, объекте ParameterBag.Я не думаю, что есть особые требования к этому объекту, но я могу ошибаться.Поэтому для меня было бы правильно иметь доступ к этим свойствам через публичные свойства.

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

В заключение, я думаю, что это безопасно для данного конкретного случая.Публичные свойства следует использовать только в особых случаях, когда это представляется полезным и когда это правильно.

0 голосов
/ 13 марта 2013

Какой смысл инкапсулировать то, что уже было инкапсулировано? Я имею в виду - каждое из этих свойств является экземпляром parameterBag со своей инкапсуляцией.

0 голосов
/ 03 мая 2011

Вы имеете в виду объект Request ? Или о каких свойствах вы думаете?

Если вы беспокоитесь о безопасности, взгляните на компонент Security , используйте Test-Driven-Development, используйте проверенные библиотеки (не изобретайте собственные аутентификации, криптографию и связанные с ними решения) и делайте обзоры кода.

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