BRE
规则引擎:
描述业务逻辑的声明
IF
<Condition(s)>
Then
<Action(s)>
策略:
一组相关的规则可以组合成一个策略
基本原理:
1.正向推导(forward-chaining),基于指定策略内的所有规则来推导结论的推导引擎.
2.检查引擎当前状态变量,即所有事实(fact),找出与这些事实相匹配的规则
3.利用事实来评估规则条件
4.如果某规则条件符合,结论就会被执行
5.如果结论执行时会添加或更新事实,整个匹配和评估过程会再重新来一次
为什么需要规则引擎:
1.使用代码实现业务逻辑的传统方法的缺点:
(1).复杂的业务逻辑难以用代码来表达
(2).业务逻辑转换成代码后可理解性下降.
(3).无法应对灵活多变的业务规则
(4).熟悉业务逻辑的是业务分析员而不是程序员.
2.业务规则引擎的优势:
(1).使用推理引擎解释规则声明,不需要人为编码.
(2).声明可以由业务分析人员来维护.
(3).不需要重新编译或部署
(4).真正易变的是条件而不是流程
策略的版本管理
1.策略可以随时取消部署
2.多个版本可以同时部署,永远使用最近publish的策略.
BizTalk业务规则相关概念
Term
Description
Policy 策略
逻辑上相关的一组规则
Rule 规则
包含条件组合,及当条件组合为真时执行的一组动作
Condition 条件
包含对事实的判断
Facts 事实
条件和动作所操作的对象
Actions 动作
当条件为真时所执行的操作
Vocabulary 词汇
逻辑上相关的一组定义
Definition 定义
对技术数据定义的用户友好的描述
Rule Engine
规则引擎
根据事实评估相应的条件并执行相应的操作
Rule based application
提交事实并调用策略
Rule Store
规则库
保存策略和规则的仓库
Fact事实类型
1.XML
(1).XmlDocument的包装,提供了规则处理中需要的内部数据
(2).通过XPath来定位元素结点来取得数据
(3).流程内的消息变量本身就是XmlDocument,因此可以直接作为事实传人
2.数据库
(1).在规则中使用数据库事实可以让引擎自动建立更有效率的SQL语句来获取或更新数据库内的数据
(2).引擎会对事实中所有的数据列进行评估
(3).如果是只读数据,最好使用长期事实来实现快取
3..NET类型
(1).任何.NET 类型均可作为事实使用
不需要实现接口或者继承其他基类
(2).组件必须部署到GAC中
长期事实和短期事实
1.短期事实会在规则执行是被带入
规则执行过后事实对象会被销毁
2.长期事实可被快取
通过給策略配置.NET 事实获取器
每次执行时调用IFactRetriever.UpdateFacts
以执行引擎实例为单位快取
允许FactRetriever对象将事实快取
词汇(Vocabularies)
如何调用业务规则
1.在业务流程中使用调用业务规则Shape
必须包含在Atomic Scope 中
2.在表达式Shape(Expression)中
可以指定要调用的版本
3.可以从.NET程序代码中调用
规则引擎以.NET类别的形式对外服务
允许流程及其他应用程序使用相同的规则