工作流引擎:其实是类似于在我们生活中处理一些事情的流程,即使在过程中不会出现更换人员的情况,只要是办理流程的转移或变化,都可以将它纳入到这个范畴!例子:当你去办理事情,首先是 A 君和你交涉,当处理完成后,又有 B 君和你洽谈,这就是一个典型的流程。每个流程都可以拆分为小的子流程, 它代表了一种数据或信息的流向;
JBPM 用全对象化的方式,模拟了这种形态。通过提供的 ProcessDefine,Take,Token,Action,Event 等持久化地对象,来推动流程在计算机里的实现;
规则引擎:首先规则是指的是办理事情的一些符合自身的条件。是万物生存的根本。规则可以促使形成工作流程,同时是支配流程的最要因素。没了规则,就没有流程;规则引擎就是通过提供的多种方式,来解释调用者设定这些规则后,需要完成的事情;
工作流是一个个节点串在一起的。 规则是这个节点中接受数据然后输出数据的一系列规则。
我来详细解释工作流(Workflow)和规则引擎(Rule Engine)的区别,并通过伪代码说明。
主要区别
1. 核心目标不同
- 工作流:关注业务流程的编排和流转,强调”做什么”和”什么顺序做”
- 规则引擎:关注业务决策的制定,强调”在什么条件下做什么”
2. 执行模式不同
- 工作流:按照预定义的路径顺序执行,是线性或分支的过程
- 规则引擎:根据事实和规则进行模式匹配,执行满足条件的规则,是非线性的
3. 应用场景不同
- 工作流:适用于有明确步骤和审批流程的场景,如请假审批、报销流程
- 规则引擎:适用于复杂决策逻辑的场景,如风控规则、促销规则
伪代码示例
工作流示例(请假审批流程)
# 工作流定义
class LeaveWorkflow:
def start(self, request):
# 按照预定义顺序执行
if self.submitRequest(request):
if self.directLeaderApprove():
if request.days > 3:
if self.departmentLeaderApprove():
return self.notifyResult("已批准")
else:
return self.notifyResult("部门经理拒绝")
else:
return self.notifyResult("已批准")
else:
return self.notifyResult("直属领导拒绝")
else:
return self.notifyResult("提交失败")
def submitRequest(self, request):
# 提交请假申请
return True
def directLeaderApprove(self):
# 直属领导审批
return True
def departmentLeaderApprove(self):
# 部门经理审批
return True
def notifyResult(self, result):
# 通知结果
print(result)
规则引擎示例(促销规则)
# 规则引擎定义
class PromotionRuleEngine:
def __init__(self):
self.rules = []
def addRule(self, rule):
self.rules.append(rule)
def execute(self, order):
# 所有满足条件的规则都会执行
for rule in self.rules:
if rule.match(order):
rule.execute(order)
# 规则定义
class Rule:
def match(self, order):
pass
def execute(self, order):
pass
# 具体规则实现
class TotalAmountDiscountRule(Rule):
def match(self, order):
return order.total_amount >= 1000
def execute(self, order):
order.discount = order.total_amount * 0.1
class FirstOrderRule(Rule):
def match(self, order):
return order.is_first_order
def execute(self, order):
order.gift = "新人礼包"
# 使用示例
engine = PromotionRuleEngine()
engine.addRule(TotalAmountDiscountRule())
engine.addRule(FirstOrderRule())
# 一个订单可能同时满足多个规则
order = Order(total_amount=1500, is_first_order=True)
engine.execute(order)
关键差异说明
-
执行方式
- 工作流是按照预定义的路径顺序执行,每个节点都有明确的下一个节点
- 规则引擎是并行匹配所有规则,满足条件的规则都会执行
-
维护方式
- 工作流需要修改流程定义来改变业务流程
- 规则引擎只需要添加或修改规则,不影响其他规则
-
扩展性
- 工作流的修改可能影响整个流程
- 规则引擎可以随时添加新规则,互不影响
-
使用场景
- 工作流适合固定流程的业务场景
- 规则引擎适合复杂决策的业务场景
通过以上伪代码可以看出,工作流更注重流程的编排,而规则引擎更注重条件的判断和动作的执行。在实际应用中,有时也会将两者结合使用,以满足更复杂的业务需求。
规则引擎开源库
- GitHub - zjn-zjn/ice: Rule engine/process engine, committed to solving flexible and complex hard-coded problems, for complex/flexibly changing business, provide a new abstract orchestration solution that is lightweight, high-performance and provides visual operation pages. Java规则引擎-ice,针对复杂/灵活变动业务,提供一个新的抽象编排解决方案,轻量级,高性能并提供可视化操作页面
- 编排式规则引擎LiteFlow在转转轻质检报告的实践
- 规则引擎是什么?何时使用用到规则引擎 - 知乎