次のような状況を処理できるエンジンを探しています。
顧客オブジェクトがアタッチされた注文オブジェクトがあります。
ルール:
order.customer.id = 186 および order.industry = 23 の場合、order.price = 100
NxBRE を見つけましたが、これはやり過ぎですか?
このような状況に対して他の人は何をしていますか?ハードコーディングするか、Eval を使用しますか?
次のような状況を処理できるエンジンを探しています。
顧客オブジェクトがアタッチされた注文オブジェクトがあります。
ルール:
order.customer.id = 186 および order.industry = 23 の場合、order.price = 100
NxBRE を見つけましたが、これはやり過ぎですか?
このような状況に対して他の人は何をしていますか?ハードコーディングするか、Eval を使用しますか?
私も同様の状況に遭遇し、既存のエンジンを使用するのではなく、独自のエンジンを構築することを考えました。現在のロジックに変更があった場合や、新しい根拠で進めた場合は非常に苦痛になるからです。エンジンがどのように機能するかを知ることができれば、どんなロジックにもオープンであり、最良のことは、ローカルおよびグローバルの最適を見つけるソリューションを構築できることです!
以下のスプーン フィード エンジンのリンクを参照してください。新しいエンジンの作成に役立ちました。
もっと単純なバージョンを探していて、このようなコードを書きたい場合は...
[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()
{
// ARRANGE
int threshold = 5;
int actual = 10;
// ACT
var integerRule = new IntegerGreaterThanRule();
integerRule.Initialize(threshold, actual);
var integerRuleEngine = new RuleEngine<int>();
integerRuleEngine.Add(integerRule);
var result = integerRuleEngine.MatchAll();
// ASSERT
Assert.IsTrue(result);
}
...またはこのように...
[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()
{
// ARRANGE
int threshold = 5;
int actual = 10;
// ACT
var integerRule = new IntegerGreaterThanRule(threshold);
var integerRuleEngine = new RuleEngine<int>();
integerRuleEngine.ActualValue = actual;
integerRuleEngine.Add(integerRule);
// Get the result
var result = integerRuleEngine.MatchAll();
// ASSERT
Assert.IsTrue(result);
}
...それなら、ゆっくりとルール エンジンを構築しているブログをチェックしてみてください。 http://www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx