Setter e getter privati

1

Sto imparando OOP - Ho letto questa risposta un certo numero di volte e ora lentamente comincio a capire degli usi pratici delle interfacce pubbliche (getter e setter). Comprendo che non è necessario fornire accessor / mutators pubblici a tutte le proprietà di un singolo oggetto in quanto interrompe l'incapsulamento.

Tuttavia, nella risposta, è implicito che tutte le proprietà da manipolare solo all'interno di quell'oggetto (cioè quelle che non hanno un'interfaccia pubblica) non richiedono affatto setter. Seguendo questo pensiero, ciò implicherebbe la stessa cosa anche per i getter.

Quando si segue S in SOLID, le classi diventano piuttosto piccole. Come tale uso ancora getter e setter per tutte le mie proprietà poiché aggiungere la convalida ai setter è semplice. Tuttavia, qualsiasi proprietà a cui non si deve accedere dall'esterno dell'oggetto, si limita a designare questi setter / getter come protetti.

Questo mi consente di mantenere la convalida per l'utilizzo all'interno di metodi privati limitando al tempo stesso l'accesso pubblico. Capisco che i getter e i setter sono usati per fermare altri oggetti che manipolano direttamente le proprietà di altri oggetti, ma per i setter / getter "privati" - è necessario (convalida a parte) o anche pratica generale?

Il solo altro luogo Vedo riferimento a setter / getter "privati" è questa risposta che tocca l'ereditarietà e usando setter / getter privati per accedere alle proprietà genitore, il che ha senso da una prospettiva di incapsulamento.

    
posta myol 15.07.2015 - 16:31
fonte

2 risposte

6

Considera questi punti:

  1. La "S" in solido non significa "fare una cosa". Significa "avere una sola responsabilità". Se scopri che le tue classi proliferano, potrebbero essere troppo piccole. Non c'è niente di sbagliato in una classe che fa molte cose, purché tutte queste cose riguardino una singola responsabilità. Considera il caso di un repository, che ha diversi metodi per accedere ai dati, ma una sola responsabilità (quella dell'accesso ai dati).

  2. Puoi convalidare le informazioni all'interno di una classe usando metodi normali. Getter e setter sono destinati a essere consumati da un cliente. A parità di altre condizioni, confonderai il programmatore che deve leggere il tuo codice dopo averlo scritto, senza una buona ragione.

risposta data 15.07.2015 - 16:44
fonte
3

I getter e i setter privati non avrebbero nemmeno molto senso, davvero. Dovresti incapsulare l'incapsulamento e gonfiare la tua classe, rendendo difficile la lettura.

Il motivo per cui le persone creano getter e setter è di limitare il client a fare qualcosa di stupido con i dati di classe e di nascondere ciò che la classe fa ai dati dal client.

    
risposta data 15.07.2015 - 16:36
fonte

Leggi altre domande sui tag