Resumen: ¿Existe un buen patrón de diseño para reducir la duplicación de información entre valores estrechamente interdependientes?
En mi línea de trabajo, es bastante común tener una relación entre cantidades, de modo que pueda derivar una de las cantidades si conoce las otras. Un ejemplo podría ser la ley del gas ideal :
Pv = RT
Podrías imaginar crear una clase para representar el estado de un gas ideal. La clase tendría 3 propiedades, naturalmente Pressure, Temperaturey SpecificVolumecada uno de un tipo apropiado.
Para el usuario de un objeto de esta clase, parece natural esperar que si establece valores para ambos Pressurey Temperature, podría leer un valor SpecificVolumey esperar que el objeto lo haya calculado por usted.
Del mismo modo, si establece valores para ambos Pressurey SpecificVolume, podría leer Temperature, etc.
Sin embargo, implementar realmente esta clase requiere cierta duplicación de información. Debería programar explícitamente todas las variaciones de la ecuación, tratando una variable diferente como dependiente en cada caso:
T = P * v / RP = R * T / vv = R * T / P
que parece violar el principio SECO . Aunque cada uno expresa la misma relación, estos casos requieren codificación y pruebas independientes.
En casos reales, la lógica en la que estoy pensando es más compleja que este ejemplo, pero presenta el mismo problema básico. Por lo tanto, tendría un valor real si pudiera expresar la lógica solo una vez, o al menos menos veces.
Tenga en cuenta que una clase como esta probablemente también tenga que ocuparse de asegurarse de que se inicializó correctamente antes de que se lean los valores, pero creo que es una consideración secundaria.
Aunque di un ejemplo matemático, la pregunta no se limita solo a las relaciones matemáticas entre los datos. Ese solo parecía ser un ejemplo simple para hacer el punto.
Pv/T != R. No estoy seguro de si esa idea podría ayudarlo a resolver los problemas subyacentes, o si eso incluso lo complica.