Sto implementando un semplice oggetto Quota
che determina una percentuale di utilizzo basata su maximum
e used
.
private int maximum;
private int used;
public Quota(int used, int maximum) {
this.maximum = maximum;
this.used = used;
}
public double getUsagePercentage() {
return ((double) used / (double) maximum) * 100.0;
}
public int getMaximum() {
return maximum;
}
public void setMaximum(int maximum) {
this.maximum = maximum;
}
public int getUsed() {
return used;
}
public void setUsed(int used) {
this.used = used;
}
Mi sono reso conto che avrei potuto farlo in un altro modo, però, e in realtà ho la logica del setter:
private int maximum;
private int used;
private double percentageUsed;
public Quota(int used, int maximum) {
this.maximum = maximum;
this.used = setUsed(used);
}
public int getMaximum() {
return maximum;
}
public void setMaximum(int maximum) {
this.maximum = maximum;
percentageUsed = ((double) used / (double) maximum) * 100.0;
}
public int getUsed() {
return used;
}
public void setUsed(int used) {
this.used = used;
percentageUsed = ((double) used / (double) maximum) * 100.0;
}
public double getUsagePercentage() {
return percentageUsed;
}
Il secondo modo sembra molto, molto più brutto per me, ma forse sono solo indottrinato. Ovviamente mi rendo conto che la logica viene copiata tra i due setter, ma anche se l'hai estratta nel suo metodo di supporto private
, ottieni il punto. Ho pensato che forse questo era l'approccio migliore in modo che il calcolo della percentuale non dovesse accadere ogni volta che viene chiamato il metodo getUsagePercentage()
. Se non sono stati modificati né i valori maximum
né used
, sembra inutile continuare a eseguire un'operazione a cui già conosciamo la risposta.
Esiste un precedente per cui scegliere l'altro? Mi piace il primo migliore solo perché ho fatto Java per sempre, ma non è un argomento valido per mantenerlo in quel modo. Quali sono i vantaggi e gli svantaggi di entrambi? O è veramente, oggettivamente migliore dell'altro?