Se alguém escreve código para que uma variável interna $ _fields seja acessível sem o uso de métodos getter / setter, existe um termo adequado para descrevê-lo?
Algo educado o suficiente para usar com gerenciamento :)
Se alguém escreve código para que uma variável interna $ _fields seja acessível sem o uso de métodos getter / setter, existe um termo adequado para descrevê-lo?
Algo educado o suficiente para usar com gerenciamento :)
Respostas:
Expor os membros privados nunca é uma coisa boa na sociedade educada ...
Essa prática é a falta de / encapsulamento ruim.
private
) tem mais uma implementação do conceito de encapsulamento.
__
para identificar nomes). Outras linguagens também podem ter um encapsulamento ruim, por exemplo, reflexão em Java e aritmética de ponteiros em C ++ para obter variáveis privadas. Python simplesmente não cria a sintaxe para fazê-lo tão complicado.
__
nomes diferentes. Sem o __
, o design ainda reflete um bom encapsulamento. Afirmar que "público" significa "falta de / encapsulamento ruim" está errado. O conceito ainda está presente. O código fonte não possui decoração apropriada.
Além da falta de encapsulamento já mencionada por Oded, dependendo da linguagem de programação e de seus paradigmas, também podem ser "dados antigos simples" (onde não é necessariamente um cheiro antipadrão ou de código).
Já ouvi o termo "objeto nu" antes.
É chamado de bolsa de propriedade.
Geralmente é usado para armazenar um conjunto de propriedades talvez relacionadas (cada uma delas pode ser potencialmente um objeto de classe que possui ou não especificadores de acesso apropriados). Mas a estrutura circundante é apenas um saco de propriedades.
É chamado de "não seguir um padrão de codificação específico".
O OP escreveu:
uma variável interna $ _fields está acessível sem o uso de métodos getter / setter
Isso pode ser contra o seu padrão e, portanto, pode ser um cheiro de código. Mas não é necessariamente um encapsulamento ruim. Expor uma variável interna (como em "apenas uso interno") sobre getter e setters para o mundo externo seria ainda pior.
A questão é: deve $_fields
ser acessível para o mundo exterior?
Nesse caso, temos um caso em que você adicionaria métodos getter / setter. Esses métodos não encapsulam nada além do fato de $_fields
ser uma variável de algum tipo (em oposição a algo calculado / buscado / etc. Em tempo real). Dependendo do idioma, você provavelmente ainda vazará o tipo (também conhecido como detalhe de implementação) para o exterior. Se você sempre deseja getters / setters, ou apenas quando "necessário", é um problema padrão de codificação.
Se não$_fields
deve estar acessível, não acesse. Se você deve impedir que outras pessoas o acessem no nível do idioma (privado e amigos) ou não (o que pode facilitar a depuração em determinadas circunstâncias) é - novamente - um problema padrão de codificação.
A questão do encapsulamento é inteiramente ortogonal a isso. Violar o encapsulamento é absolutamente possível com getters e setters. É ainda mais fácil entrar, porque os alarmes da maioria das pessoas não tocam quando eles veem vários getters e setters - código que aparentemente segue as práticas recomendadas. Código, que pode muito bem introduzir muito mais dependências nos detalhes da implementação interna do que uma variável chamada $_fields
que passa a não ser especificada como private
.
Sou fã de más analogias: chamar esse pobre encapsulamento é como chamar alguém que tem uma arma de assassino.
Eu chamaria essas variáveis de membro público .
se seus métodos setter / getter não passam de
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
então, apenas criar uma variável púbica é apenas salvar algumas digitações fora de alguns casos extremos onde a diferença é importante.