Sto codificando un sistema in cui ho oggetti che rappresentano un insieme di risorse. Queste risorse sono identificabili (hanno un ID). Può esistere una sola risorsa con lo stesso ID e quindi più oggetti con lo stesso ID dovrebbero avere gli stessi valori.
Il mio problema è con il concetto di uguaglianza in questo caso. Dovrebbe essere basato sull'ID o sui valori da solo? L'oggetto A = oggetto B perché ha lo stesso ID O dovrebbe oggetto A == oggetto B perché i loro campi sono gli stessi.
Una possibilità che stavo pensando era quella di avere il confronto basato su ID "uguale" e il confronto basato sul campo essere "equivalente". In alternativa potrei averlo in modo che il confronto basato sul campo fosse "uguale" e il confronto basato su ID era "representSameObject" (o qualcosa del genere). Solo un esempio di pseudo-codice:
class A {
String uuid;
int field1;
double field2;
List<String> listField;
@Override
public boolean equals(Object other) {
return uuid.equals(other.uuid);
}
public boolean equivalent( other ) {
if (this == other) {
return true;
}
if (null == other) {
return false;
}
if (other.getClass() != this.getClass()) {
return false;
}
A rhs = (A) other;
return new EqualsBuilder().append(field1, rhs.field1).append(field2, rhs.field2).append(listField, other.listField).isEquals();
}
}
Alla fine questo può essere dovuto a una preferenza personale associata ai requisiti di sistema, ma sono molto interessato a scoprire come altri hanno affrontato questo concetto. È stato noioso da parte nostra da quando ho iniziato questo progetto!
Se fa la differenza, sto programmando al minuto in Java. Non mi importa da dove viene la risposta, anche se questo è ovviamente un problema concettuale.