Zusammenfassung: Gibt es ein gutes Entwurfsmuster, um Doppelarbeit von Informationen zwischen eng voneinander abhängigen Werten zu reduzieren?
In meiner Arbeit ist es ziemlich üblich, eine Beziehung zwischen Mengen zu haben, so dass Sie eine der Mengen ableiten können, wenn Sie die anderen kennen. Ein Beispiel könnte das ideale Gasgesetz sein :
Pv = RT
Sie können sich vorstellen, eine Klasse zu erstellen, die den Zustand eines idealen Gases darstellt. Die Klasse würde 3 Eigenschaften hat, natürlich Pressure
, Temperature
und SpecificVolume
jeder einen entsprechenden Typen.
Für den Benutzer eines Objekts dieser Klasse erscheint es natürlich zu erwarten, dass Sie, wenn Sie Werte für beide Pressure
und festlegen Temperature
, einen Wert für auslesen SpecificVolume
und erwarten können, dass das Objekt diesen für Sie berechnet hat.
Wenn Sie Werte für beide Pressure
und festlegen SpecificVolume
, können Sie auch Temperature
usw. auslesen .
Um diese Klasse tatsächlich zu implementieren, sind jedoch einige Informationen doppelt vorhanden. Sie müssten alle Variationen der Gleichung explizit programmieren und jeweils eine andere Variable als abhängig behandeln:
T = P * v / R
P = R * T / v
v = R * T / P
das scheint das DRY-Prinzip zu verletzen . Obwohl jeder die gleiche Beziehung ausdrückt, erfordern diese Fälle eine unabhängige Codierung und Prüfung.
In realen Fällen ist die Logik, an die ich denke, komplexer als dieses Beispiel, weist jedoch das gleiche Grundproblem auf. Es wäre also ein echter Wert, wenn ich die Logik nur einmal oder zumindest weniger oft ausdrücken könnte.
Beachten Sie, dass eine Klasse wie diese wahrscheinlich auch sicherstellen muss, dass sie ordnungsgemäß initialisiert wurde, bevor Werte ausgelesen werden, aber ich denke, dass dies eine sekundäre Überlegung ist.
Obwohl ich ein mathematisches Beispiel gegeben habe, beschränkt sich die Frage nicht nur auf mathematische Beziehungen zwischen Daten. Das schien nur ein einfaches Beispiel zu sein, um den Punkt zu verdeutlichen.
Pv/T != R
. Ich bin mir nicht sicher, ob diese Idee Ihnen bei der Lösung der zugrunde liegenden Probleme helfen könnte oder ob dies sie sogar kompliziert.