Esiste un termine usato quando le variabili interne sono dichiarate pubbliche e accessibili?

10

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:)

    
posta PeterB 06.12.2011 - 10:46
fonte

7 risposte

30

Esponendo i propri membri privati non è mai una buona cosa nella società educata ...

Questa pratica è la mancanza di / scarsa incapsulamento.

    
risposta data 06.12.2011 - 11:00
fonte
10

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).

    
risposta data 06.12.2011 - 11:29
fonte
4

Ho sentito il termine "oggetto nudo" prima.

    
risposta data 06.12.2011 - 13:40
fonte
2

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à.

    
risposta data 06.12.2011 - 11:44
fonte
2

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.

    
risposta data 06.12.2011 - 23:02
fonte
1

Chiamerei tali variabili variabili dei membri pubblici .

    
risposta data 06.12.2011 - 20:09
fonte
-2

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.

    
risposta data 06.12.2011 - 14:34
fonte

Leggi altre domande sui tag