Если кто-то пишет код так, чтобы внутренняя переменная $ _fields была доступна без использования методов получения / установки, существует ли подходящий термин для описания этого?
Что-то достаточно вежливое, чтобы использовать с управлением :)
terminology
scope
Петерб
источник
источник
Ответы:
Разоблачение частных лиц никогда не бывает хорошим делом в вежливом обществе ...
Эта практика заключается в отсутствии / плохой инкапсуляции.
источник
private
) есть еще одна реализация концепции инкапсуляции.__
для искажения имен). Другие языки также могут иметь плохую инкапсуляцию, например, отражение в Java и арифметику указателей в C ++ для доступа к закрытым переменным. Python просто не делает синтаксис, чтобы сделать это настолько громоздким.__
искажение имен. Без__
этого дизайн по-прежнему отражает хорошую инкапсуляцию. Утверждать, что «public» означает «отсутствие / плохая инкапсуляция», неправильно. Концепция все еще присутствует. В исходном коде отсутствует соответствующее оформление.Помимо отсутствия инкапсуляции, уже упомянутого Одедом, в зависимости от языка программирования и его парадигм, это также могут быть «простые старые данные» (где они не обязательно являются антипаттерном или запахом кода).
источник
Я слышал термин «голый предмет» раньше.
источник
Его называют имущественной сумкой.
Обычно он используется для хранения набора, возможно, связанных свойств (каждое из которых потенциально может быть объектом класса с соответствующими спецификаторами доступа или нет). Но окружающая структура - просто мешок свойств.
источник
Это называется "не следовать определенному стандарту кодирования".
ОП написал:
Это может быть против вашего стандарта, и (таким образом) это может быть запах кода. Но это не обязательно плохая инкапсуляция. Выставление внутренней (как в «только для внутреннего использования») переменной через getter и setters для внешнего мира было бы еще хуже.
Вопрос: должен ли
$_fields
быть доступен внешний мир?Если это так, у нас есть случай, когда вы добавите методы получения / установки. Эти методы не содержат ничего, кроме того факта, что
$_fields
это какая-то переменная (в отличие от чего-то, вычисленного / извлеченного / и т. Д. На лету). В зависимости от языка, вы, вероятно, все еще будете просачивать тип (он же деталь реализации) наружу. Независимо от того, хотите ли вы всегда получать или устанавливать, или только когда «необходимо» - это стандартная проблема кодирования.Если не
$_fields
должен быть доступно, тогда, ну, не получайте к нему доступ. Независимо от того, хотите ли вы запретить другим доступ к нему на уровне языка (частный и друзья) или нет (что может облегчить отладку в определенных обстоятельствах), опять же, это стандартная проблема кодирования.Проблема инкапсуляции полностью ортогональна этому. Нарушение инкапсуляции абсолютно возможно с геттерами и сеттерами. В это даже легче проникнуть, потому что звонки большинства людей не звонят, когда они видят группу получателей и установщиков - код, который, по-видимому, следует передовым методам. Код, который может очень хорошо вводить гораздо больше зависимостей от внутренних деталей реализации, чем вызываемая переменная,
$_fields
которая не указывается какprivate
.Я фанат плохих аналогий: называть эту плохую инкапсуляцию все равно, что называть кого-то, кто держит пистолет, убийцей.
источник
Я бы назвал такие переменные открытыми переменными-членами .
источник
если ваши методы setter / getter не более чем
тогда просто создание публичной переменной - это просто сохранение некоторой типизации за пределами нескольких крайних случаев, когда разница имеет значение.
источник