作为程序员的我们,直奔主题吧,看看流引挚是怎么工作的,至少总体上有一个认识
- 将规则载入流引挚
- 设置规则文件里用到的一些变量
- 执行规则,并保存执行结果在上下文中(Context)
再来看看流引挚规则文件的组成吧
规则文件是通过xml来定义的,规则文件主要包含以下这三部分
- rules
- logic tests
- structure
就我目前的理解,表达出来,这个规则文件可以定义变量
<
Integer
id
="10i"
value
="10"
/>
<
Integer
id
="40i"
value
="40"
/>
相当于
int
10i
=
10
;
int
40i
=
40
;
还可以引用到外部变量
<
ObjectLookup
id
="QuantityOrdered"
objectId
="CurrentOrder"
member
="
"
/>
相当于
//
前提是CurrentOrder作为一个类的实例已经被增加到上下文中,当然,这里是弱类型的
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
(QuantityOrdered
>
40i)
{
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,至少让我知道这是个什么东西