Project Description依存関係と導出ルールを定義することで、変数群の値を常に同期させるためのライブラリ。(英語だめなので、日本語で説明を書いちゃったw)
例えば、「単価×数量=合計」のようなそれぞれの変数について、単価が変わっても、数量が変わっても、合計が「単価×数量」の導出ルールに従って再計算されるといったことをサポートするライブラリです。


コード例
[TestMethod]
public void TestMethod1()
{
// 単価:即値の変数オブジェクト
var unitpriseVar = ConcreteVariable.Create(100);
// 数量:即値の変数オブジェクト
var countVar = ConcreteVariable.Create(2);
// 金額:導出変数オブジェクトであり、単価および数量に依存し、単価×数量の導出ルールであることを表す
var amountVar = DerivedVariable.Create(unitpriseVar, countVar, (unitprise, count) => unitprise * count);
Assert.AreEqual(100, unitpriseVar.Value);
Assert.AreEqual(2, countVar.Value);
Assert.AreEqual(200, amountVar.Value);
// 各変数オブジェクトには、値変更の際のイベントハンドラを登録することができる。EventArgsでは古い値と新しい値を取得可能
var eventResult = "";
unitpriseVar.ValueChanged += (sender, args) => { eventResult += "#unit:" + args.OldValue + "→" + args.NewValue; };
countVar.ValueChanged += (sender, args) => { eventResult += "#count:" + args.OldValue + "→" + args.NewValue; };
amountVar.ValueChanged += (sender, args) => { eventResult += "#amount:" + args.OldValue + "→" + args.NewValue; };
// 数量を2から4変更する
countVar.Value = 4;
// 導出変数オブジェクトである金額も200→400へ自動で変更される
Assert.AreEqual(400, amountVar.Value);
Assert.IsTrue(eventResult.Contains("#count:2→4"));
Assert.IsTrue(eventResult.Contains("#amount:200→400"));
}