1 person following this project (follow)

Project Description
依存関係と導出ルールを定義することで、変数群の値を常に同期させるためのライブラリ。(英語だめなので、日本語で説明を書いちゃったw)

例えば、「単価×数量=合計」のようなそれぞれの変数について、単価が変わっても、数量が変わっても、合計が「単価×数量」の導出ルールに従って再計算されるといったことをサポートするライブラリです。


スライド3.JPG

スライド5.JPG

スライド6.JPG

コード例

[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"));
}

Last edited Oct 29 2011 at 4:52 PM by Toya256, version 11