• 规则引挚NxBRE文档纪要流引挚简介(一)


    作为程序员的我们,直奔主题吧,看看流引挚是怎么工作的,至少总体上有一个认识

    1. 将规则载入流引挚
    2. 设置规则文件里用到的一些变量
    3. 执行规则,并保存执行结果在上下文中(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,至少让我知道这是个什么东西
  • 相关阅读:
    hdu 4768 Flyer 二分
    hdu 4767 Bell
    hdu 4759 Poker Shuffle 二进制
    uva 12589
    zoj 3057 Beans Game 博弈论
    poj 2480 Longge's problem 积性函数
    重新启程
    【Luogu P1502】 窗口的星星
    【BZOJ1855】[Scoi2010] 股票交易
    【BZOJ1122】[POI2008] 账本BBB
  • 原文地址:https://www.cnblogs.com/linbc/p/1224373.html
Copyright © 2020-2023  润新知