簡介:規則引擎主要用於模型的規則控制,根據自定義的規則模型對業務模型進行賦值或執行業務模型中的方法等自定義編碼。
一、規則引擎的基本對象:
- 業務模型(包含字段屬性,方法等的基於業務創建的模型)
- 規則模型(規則是基於哪個業務模型建立的)
二、規則引擎基本流程:
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()中的條件有很多,包括各種查詢檢索判斷,還可以加載其他業務模型進行比較