- 将规则载入流引挚
- 设置规则文件里用到的一些变量
- 执行规则,并保存执行结果在上下文中(Context)
规则文件是通过xml来定义的,规则文件主要包含以下这三部分
- rules
- logic tests
- structure
<Integer id="10i" value="10"/>
<Integer id="40i" value="40"/>
相当于<Integer id="40i" value="40"/>
int 10i = 10;
int 40i = 40;
还可以引用到外部变量int 40i = 40;
<ObjectLookup id="QuantityOrdered" objectId="CurrentOrder" member=""/>
相当于 //前提是CurrentOrder作为一个类的实例已经被增加到上下文中,当然,这里是弱类型的
object QuantityOrdered = CurrentOrder.QuantityOrdered;
逻辑块object QuantityOrdered = CurrentOrder.QuantityOrdered;
<Logic>
<If>
<And>
<GreaterThan leftId="QuantityOrdered" rightId="40i"/>
</And>
<Do>
<Evaluate id="AppliedDiscount">
<Parameter name="Percent" value=".9"/>
</Evaluate>
</Do>
</If>
<Else>
<Evaluate id="AppliedDiscount">
<Parameter name="Percent" value="1"/>
</Evaluate>
</Else>
</Logic>
伪码是<If>
<And>
<GreaterThan leftId="QuantityOrdered" rightId="40i"/>
</And>
<Do>
<Evaluate id="AppliedDiscount">
<Parameter name="Percent" value=".9"/>
</Evaluate>
</Do>
</If>
<Else>
<Evaluate id="AppliedDiscount">
<Parameter name="Percent" value="1"/>
</Evaluate>
</Else>
</Logic>
if(QuantityOrdered>40i)
{
Percent = 0.9;//这里可以被规则以外的程序访问到,是规则的执行结果
}
else
{
Percent = 1;
}
{
Percent = 0.9;//这里可以被规则以外的程序访问到,是规则的执行结果
}
else
{
Percent = 1;
}
流引挚的实现中基本上都合理的定义和使用接口,看看这几个比较重要的接口
Process方法,不用说了,最重要的,执行规则的开关
RuleContext属性,就更不用说了,规则定义文件的所有变量,以及引用到的外部变量,甚至是执行结果都存放在这里
命名空间 NxBRE.FlowEngine.Rules | 描述 |
Decrement* | 自减整数 |
Exception | 抛出异常 |
False,True | |
FatalException | 重大异常 |
Increment | 自增整数 |
IncrementInit* | Incrementor or Decrementor reset. |
ObjectLookup | 通过反射映射到ruleContext中的类或者实例 |
Value | 任何类型的变量 |
哎,这个表格真是不好整啊,凑合着吧,虽然是丑了点,不过符合自己的美工表现...
上面这些就不用注释了,看字面都知道是什么意思了,强调一下,正则表达式的支持,将给扩展留下巨大的空间
载入规则文件的时候要用到这些东东,比如xbre文件就要用到XBusinessRulesFileDriver
工厂,创建IFlowEngine实例
好了,说了一堆,看起来好像没什么用...
来个HelloWorld,至少让我知道这是个什么东西