极其好用好学的规则引擎 - A2D规则引擎
写了个简单的规则引擎,普通情况够用了:
比如2家公司有各自的利率计算规则,如下:
在C#方面,没有写在C#的业务逻辑代码中,而是移到了外部规则文件中,如(ACompanyRatePolicy.r):
rule "Level 1" when alreadyCostPrice >= 0 alreadyCostPrice < 100 then rate = 1 end rule "Level 2" when alreadyCostPrice >= 100 alreadyCostPrice < 300 then rate = 0.8 end rule "Level 3" when alreadyCostPrice >= 300 then rate = 0.5 end
不同的公司调用不同的Policy定义文件来执行逻辑:
核心调用代码:
public class CustomerRateService { public static decimal CalculateRate(decimal costedAlready, decimal priceThisTime, string rulePolicy) { using (RuleEngine engine = new RuleEngine(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Rules"))) { engine.BindRule("Rating", rulePolicy); //此处的第一个参数"Rating"是规则组名称,对应的是物理文件夹,方便规则文件的管理和查看 engine.SetParameter("alreadyCostPrice", costedAlready); engine.SetParameter("thisTimePrice", priceThisTime); engine.Process(); return engine.GetDecimal("rate"); } } }
原理比较简单:
- 根据规则文件(.r文件)生成js代码
- 在C#中嵌入v8引擎执行这段js代码
- 获取结果
代码已经更新到A2D Framework了。
大家拿去用吧。。。哈哈。
自省推动进步,视野决定未来。
心怀远大理想。
为了家庭幸福而努力。
商业合作请看此处:https://www.magicube.ai
心怀远大理想。
为了家庭幸福而努力。
商业合作请看此处:https://www.magicube.ai