Resumo: Existe um bom padrão de design para reduzir a duplicação de informações entre valores fortemente interdependentes?
Na minha linha de trabalho, é bastante comum ter um relacionamento entre quantidades, de modo que você possa derivar uma das quantidades se conhecer as outras. Um exemplo poderia ser a lei dos gases ideais :
Pv = RT
Você pode imaginar criar uma classe para representar o estado de um gás ideal. A classe teria 3 propriedades, naturalmente Pressure, Temperaturee SpecificVolumecada um de um tipo apropriado.
Para o usuário de um objeto dessa classe, parece natural esperar que, se você definir valores para ambos Pressuree Temperature, poderá ler um valor para SpecificVolumee esperar que o objeto calcule isso para você.
Da mesma forma, se você definir valores para ambos Pressuree SpecificVolume, poderá ler Temperature, etc.
Para realmente implementar essa classe, no entanto, é necessária alguma duplicação de informações. Você precisaria programar explicitamente todas as variações da equação, tratando uma variável diferente como dependente em cada caso:
T = P * v / RP = R * T / vv = R * T / P
o que parece violar o princípio DRY . Embora cada um expresse a mesma relação, esses casos requerem codificação e teste independentes.
Em casos reais, a lógica em que estou pensando é mais complexa que este exemplo, mas apresenta o mesmo problema básico. Portanto, haveria um valor real se eu pudesse expressar a lógica apenas uma vez, ou pelo menos menos vezes.
Observe que uma classe como essa provavelmente também teria que lidar para garantir que fosse inicializada corretamente antes que os valores fossem lidos, mas acho que essa é uma consideração secundária.
Embora eu tenha dado um exemplo matemático, a questão não se limita apenas às relações matemáticas entre os dados. Isso apenas parecia ser um exemplo simples de entender.
Pv/T != R. Não tenho certeza se essa ideia pode ajudá-lo a resolver os problemas subjacentes ou se isso ainda a complica.