Se qualcuno scrive codice in modo che una variabile interna $ _fields sia accessibile senza usare metodi getter / setter, c'è un termine appropriato usato per descriverlo?
Qualcosa di abbastanza educato da usare con la gestione:)
Esponendo i propri membri privati non è mai una buona cosa nella società educata ...
Questa pratica è la mancanza di / scarsa incapsulamento.
Oltre alla mancanza di incapsulamento già menzionata da Oded, a seconda del linguaggio di programmazione e dei suoi paradigmi potrebbe anche essere "semplici vecchi dati" (dove non è necessariamente un odore antipattern o di codice).
Si chiama bag di proprietà.
Di solito è usato per contenere una serie di proprietà forse correlate (ognuno di questi potrebbe essere potenzialmente un oggetto di classe che ha specificatori di accesso appropriati o meno). Ma la struttura circostante è solo un sacco di proprietà.
Si chiama "non seguendo uno standard di codifica specifico".
L'OP ha scritto:
an internal variable $_fields is accessible without using getter/setter methods
Potrebbe essere contro il tuo standard e (quindi) potrebbe essere l'odore del codice. Ma è non necessariamente incapsulamento scadente. Esporre un interno (come in "solo di uso interno") variabile su getter e setter verso il mondo esterno sarebbe anche peggio.
La domanda è: dovrebbe $_fields
essere accessibile per il mondo esterno?
Se è così, abbiamo un caso in cui dovresti aggiungere metodi getter / setter. Questi metodi non incapsulano nulla se non il fatto che $_fields
è una variabile di qualche tipo (al contrario di qualcosa calcolato / recuperato / ecc. Al volo). A seconda della lingua, probabilmente perderai il tipo (ovvero un dettaglio di implementazione) all'esterno. Se vuoi sempre getter / setter, o solo quando "necessario" è un problema standard di codifica.
Se $_fields
dovrebbe non essere accessibile, allora, bene, non accedervi. Indipendentemente dal fatto che tu debba impedire ad altri di accedervi a livello di lingua (privato e amici) o meno (che potrebbe facilitare il debug in determinate circostanze) è - ancora - un problema standard di codifica.
Il problema dell'incapsulazione è del tutto ortogonale a questo. L'incapsulamento violento è assolutamente possibile con getter e setter. È anche più facile da inserire, perché le campane di allarme della maggior parte delle persone non squillano quando vedono un gruppo di getter e setter - codice che apparentemente segue le migliori pratiche. Codice, che potrebbe introdurre molto più dipendenze sui dettagli di implementazione interni rispetto a una variabile chiamata $_fields
che non deve essere specificata come private
.
Sono un fan delle cattive analogie: definire questo incapsulamento scadente è come chiamare qualcuno che detiene una pistola un assassino.
se i metodi setter / getter non sono altro che
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
quindi la semplice creazione di una variabile pubica sta solo salvando alcune digitazioni al di fuori di alcuni casi limite in cui la differenza è importante.
Leggi altre domande sui tag terminology scope