NRules(0.9.0)规则引擎开发指南 - DaivdHu

时间:2024-02-23 22:34:06

NRules(0.9.0)规则引擎开发指南

简介:规则引擎主要用于模型的规则控制,根据自定义的规则模型对业务模型进行赋值或执行业务模型中的方法等自定义编码。

 

一、规则引擎的基本对象:

  1. 业务模型(包含字段属性,方法等的基于业务创建的模型)
  2. 规则模型(规则是基于哪个业务模型建立的)

 

二、规则引擎基本流程:

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();

 

  1. 实例化业务模型,并添加到规则中

 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);

 

  1. 执行规则

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()中的条件有很多,包括各种查询检索判断,还可以加载其他业务模型进行比较