NRules(0.9.0)规则引擎开发指南
简介:规则引擎主要用于模型的规则控制,根据自定义的规则模型对业务模型进行赋值或执行业务模型中的方法等自定义编码。
一、规则引擎的基本对象:
- 业务模型(包含字段属性,方法等的基于业务创建的模型)
- 规则模型(规则是基于哪个业务模型建立的)
二、规则引擎基本流程:
1.加载规则模型类库
var repository = new RuleRepository();
repository.Load(x =>x.From(typeof(PreferredCustomerDiscountRule).Assembly));
2.将所有规则编译到工厂中,工厂创建会话对象
//Compile rules
var factory = repository.Compile();
//Create a working session
var session = factory.CreateSession();
- 实例化业务模型,并添加到规则中
var customer = new Customer("John Doe") { IsPreferred = true };
var customer2 = new Customer("zhibin hu") { IsPreferred = true };
//var order1 = new Order(123456, customer, 2, 25.0) { IsOpen= true };
//var order2 = new Order(123457, customer, 1, 100.0) { IsOpen = true };
//Insert facts into rules engine\'s memory
session.Insert(customer);
session.Insert(customer2);
- 执行规则
session.Fire();
三、规则模型的创建及对业务模型的影响:
1.创建规则模型必须继承NRules.Fluent.Dsl.Rule
2.规则的定义重写该方法:public abstract void Define();
在Define内调用when()定义规则执行条件
如:
When().Match<Customer>(() => customer);
该规则定义了,当检测到添加了类型为Customer的业务模型时,则执行then中的行为
如
Then().Do(x => Console.WriteLine("PreferredCustomerDiscountRule...name:"+customer.Name));
在then中可以为业务模型赋值,执行业务模型中的方法
When()中的条件有很多,包括各种查询检索判断,还可以加载其他业务模型进行比较