C'è qualche ragione per evitare i getter privati?

2

Anche se potrei scrivere qualcosa del genere (in C #. Ci sono, ovviamente, equivalenti in altre lingue):

public int SomeNumber { private get; set; }

Ho mai incontrato qualcosa di simile. C'è qualche ragione particolare?

Modifica La domanda è stata suggerita come duplicata di Setter e getter privati . La domanda riguarda l'uso delle proprietà come campi (selers privati e ):

However, any property that shouldn't be accessed from outside the object I simply designate those setters/getters as protected.

La mia domanda non è un duplicato poiché riguarda proprietà con getter privati e setter pubblici .

    
posta Sipo 21.11.2017 - 10:48
fonte

2 risposte

8

Vedo spesso questo codice e non mi piace.

I miei colleghi lo usano spesso per iniettare alcune dipendenze in un'istanza. Ma così facendo, aprono la proprietà per cambiarne un po 'quando più tardi, mentre la proprietà dovrebbe essere impostata solo durante la creazione dell'oggetto.

E questo è il motivo per cui non mi piace: non puoi essere sicuro che il setter pubblico venga chiamato più tardi e cambi lo stato dell'istanza che pensavi fosse stabile.

Cioè, quando è inteso per l'iniezione di dipendenza, usa la modalità di un'iniezione di dipendenze appropriata alla creazione dell'oggetto. Se è pensato per cambiare lo stato dell'istanza, meglio usare un metodo ("comando") per dedurre lo scopo.

    
risposta data 21.11.2017 - 12:15
fonte
4

Il motivo per cui non l'hai mai visto prima non è perché un tale codice causerebbe problemi immediati. Il motivo è probabilmente: questa combinazione non è particolarmente utile .

Il codice che rende pubblici setter consente di chiamare il codice per modificare lo stato dell'oggetto, quindi il codice chiamante "conosce" già il contenuto di ciò che è stato trasmesso attraverso il setter e semplicemente non ha senso "nascondere" questo contenuto dal fuori rendendo privato il getter. Quindi non c'è molto vantaggio da questo, al contrario, testare lo stato dell'oggetto o riutilizzare l'oggetto diventa tipicamente più difficile.

Confronta questo, per esempio, con la combinazione di un setter privato con un getter pubblico. Questo è spesso molto utile per limitare o prevenire effetti collaterali indesiderati ed è necessario quando si progettano oggetti immutabili.

    
risposta data 21.11.2017 - 22:28
fonte

Leggi altre domande sui tag