Quando Getters e Setters sono giustificati è una domanda eccellente che si concentra sull'utilizzo di getter e setter come parte dell'interfaccia esterna.
Quello con cui sto combattendo è ... avendo getter e setter ci sono ora diversi modi per aggiornare lo stato dell'oggetto, dato che i campi privati possono essere aggiornati direttamente bypassando il setter o possono essere aggiornati dal setter.
Prendi l'esempio seguente ... _size è il campo privato e ha due metodi getSize()
e setSize(int size)
. Se incrementare _size è codificato come il metodo increment
, tutto è buono. D'altra parte, l'utilizzo di increment2
può mettere Ordine in uno stato illegale.
C'è un modo per impedire agli sviluppatori di aggirare accidentalmente il getter / setter e utilizzare direttamente i campi privati !? In caso contrario, quale convenzione dovrebbe essere utilizzata per garantire che l'oggetto non venga mai messo in uno stato non valido?
public class Order {
private int _size = 0;
public int getSize() {
return _size;
}
public void setSize(int size) {
if (_size < 0)
throw IllegalArgumentException("...")
_size = size;
}
public void increment(int increment) {
setSize(getSize() + increment);
}
public void increment2(int increment) {
_size = _size + increment;
}
}