Riepilogo: esiste un buon modello di progettazione per ridurre la duplicazione delle informazioni tra valori strettamente interdipendenti?
Nella mia linea di lavoro è abbastanza comune avere una relazione tra quantità tale da poter ricavare una delle quantità se si conoscono gli altri. Un esempio potrebbe essere la legge sui gas ideali :
Pv = RT
Potresti immaginare di creare una classe per rappresentare lo stato di un gas ideale. La classe avrebbe 3 proprietà, naturalmente Pressure
, Temperature
e SpecificVolume
ciascuna di un tipo appropriato.
Per l'utente di un oggetto di questa classe, sembrerebbe naturale aspettarsi che se imposti valori per Pressure
e Temperature
, potresti quindi leggere un valore per SpecificVolume
e aspettarti che l'oggetto l'ho calcolato per te.
Allo stesso modo, se imposti valori per Pressure
e SpecificVolume
, puoi quindi leggere Temperature
, ecc.
Per implementare effettivamente questa classe, tuttavia, è necessaria una duplicazione delle informazioni. Dovresti programmare esplicitamente tutte le variazioni dell'equazione, trattando una variabile diversa come dipendente in ciascun caso:
-
T = P * v / R
-
P = R * T / v
-
v = R * T / P
che sembra violare il principio ASCIUTTO . Sebbene ognuno di essi esprima la stessa relazione, questi casi richiedono una codifica e un'elaborazione indipendenti. test.
In casi reali la logica a cui sto pensando è più complessa di questo esempio, ma presenta lo stesso problema di base. Quindi ci sarebbe un valore reale se potessi esprimere la logica solo una volta, o almeno un paio di volte.
Si noti che una classe come questa probabilmente dovrebbe anche occuparsi di assicurarsi che sia stata inizializzata correttamente prima che i valori vengano letti, ma penso che sia una considerazione secondaria.
Sebbene abbia fornito un esempio matematico, la domanda non è limitata solo alle relazioni matematiche tra i dati. Sembrava essere un semplice esempio per chiarire il punto.