规则引擎开发规范--规则配置类规范<连载6>

2.5. 尽可能在一个规则或者一个规则集中完成所有动作
充分利用规则集和规则的初始化动作、起始动作、进入条件、多条件和动作等。尽可能在一个规则或者一个规则集中完成一个任务。不过多的分层次。
最初设计规则集和规则时,每个规则都是由条件和动作组成的。因此一个标准的规则就是
如果 条件1
那么 动作1
组成的,这种是最基本的规则。
但是当规则具有两个条件时,可以将此条件放到规则的条件中,变成
如果 条件1并且条件2
那么 动作1。
这是第二种标准的规则形式。
此时如果两个条件间有多种组合,不同组合间进行不同的动作。比如
如果条件1并且条件2
那么动作1
否则如果条件1或者条件2
那么动作2
这是第三种标准的规则形式。
如果条件中的某些判断时,需要实现处理一下,那么可以将规则设置成支持初始化。比如:
初始化动作1
如果条件1并且条件2
那么动作1
否则如果条件1或者条件2
那么动作2
这是第四种标准的规则形式
如果所有这些条件的判断,都需要满足一个公共条件,只有当满足了此条件之后,才能对此规则进行处理。可以将规则设置成支持进入条件,比如:
进入条件:进入条件1
初始化动作1
如果条件1并且条件2
那么动作1
否则如果条件1或者条件2
那么动作2
这种方式并不属于规则的标准格式。这只是为了能否显示查看方便,而进行的配置。这种方式和添加一个规则集,将规则放到规则集下面的方式是一样的。
规则集:
进入条件:进入条件1
规则1:
初始化动作1
如果条件1并且条件2
那么动作1
否则如果条件1或者条件2
那么动作2
在规则的配置时,尽可能的少加层次,特别是循环中套循环。不便于理解,并且其他用户查看起来也不容易。
2.6. 充分利用决策树的功能。
如果需要调用外部的规则包,尽可能采用决策树的功能,来更加直观的展现逻辑。
目前采用规则来处理时,是按照顺序执行的方式来运行的。因此当配置完规则后,缺省会根据顺序形成一个流程图。如果设置了规则集,则相当于定义了流程的分支。当在规则中定义了调用外部规则包后,相当于调用了子流程。
通过顺序执行的规则集、规则、和调用外部规则包功能,就实现了流程图、流程分支和子流程的功能。
但是为了更加直观的展现流程,特别是需要调用外部规则包时,则使用决策树功能会更加直观。
决策树,采用流程图方式来定义顺序,每个流程的节点可以是某个规则或者是某个外部的规则包。同时多个节点之间可以采用连线方式来定义执行顺序和执行条件。

猜你喜欢

转载自silencelight.iteye.com/blog/2294778
今日推荐