php网站怎么注入,成都营销类网站设计,北京网站设计确保代码符合w3c,河北监理工程师考试最新消息文档修订历史
时间版本主要内容2023.05.12v1.0.0初始化
1. 概述
1.1 需求
1.1.1 需求背景 当同一个业务场景中#xff0c;有非常多的业务分支后#xff0c;需要有非常多的 if 判断#xff0c;来承载这些简单的业务逻辑#xff0c;但随着业务的发展#xff0c;业务逐渐…文档修订历史
时间版本主要内容2023.05.12v1.0.0初始化
1. 概述
1.1 需求
1.1.1 需求背景 当同一个业务场景中有非常多的业务分支后需要有非常多的 if 判断来承载这些简单的业务逻辑但随着业务的发展业务逐渐复杂if 分支越来越多可维护性越来越差技术债务越来越重。 if-else 的目的不外乎以下若干场景
异常逻辑处理特殊case不同业务流程处理… … 但这些分支逻辑难以避免我们需要考虑如何正视它。
1.1.2 需求目标 业务规则往往是一个庞大且不断变化的规则组合这使得系统非常复杂如果只是使用常规代码则会产生大量的维护工作。 我们使用规则引擎将庞大的规则组合从业务代码中抽离出来维护到一个数据源中实现 将业务流程与业务规则分离 的目标。
专题分析
规则引擎方案调研
方案详情优点缺点Drools开源规则引擎由Red Hat开发和维护。它提供了一个成熟的规则引擎和规则管理系统支持规则的动态定义、评估和执行。1. 功能丰富 2. 支持DB存储规则1. 复杂度高学习成本高EasyRule轻量级框架基本上只提供了一个规则判断和行为执行的框架。通过一些注解实现抽象的方式去做规则。学习成本低1.不包含规则编排等功能 2. 不提供连接DB的能力修改配置后不实时生效
Drools
Drools常用 API 使用介绍
EasyRule
EasyRule常用API EasyRule-github-代码用例
EasyRule 使用介绍 主要涉及的模型如下
Rule规则的生成 多种方式来定义规则 Condition执行条件的定义Action 条件满足后的行为RuleEngine执行决策的引擎
Rule的生成方式
注解方式
Rule(name my rule1, description my rule description, priority 1)
public class MyRule1 {Conditionpublic boolean when(Fact(type) Integer type) {return type 1;}Action(order 1)public void execute1(Facts facts) throws Exception {log.info(MyRule1 execute1, facts{}, facts);}Action(order 2)public void execute2(Facts facts) throws Exception {log.info(MyRule1 execute2, facts{}, facts);}
}流式API
Rule weatherRule new RuleBuilder().name(weather rule).description(if it rains then take an umbrella).when(facts - facts.get(rain).equals(true)).then(facts - System.out.println(It rains, take an umbrella!)).build();表达式方式 支持 MVEL , SpEL and JEXL
Rule weatherRule new MVELRule().name(weather rule).description(if it rains then take an umbrella).when(rain true).then(System.out.println(\It rains, take an umbrella!\););规则描述文件
---
name: adult rule
description: when age is greater than 18, then mark as adult
priority: 1
condition: person.age 18
actions:- person.setAdult(true);
---
name: weather rule
description: when it rains, then take an umbrella
priority: 2
condition: rain true
actions:- System.out.println(\It rains, take an umbrella!\);思考与方案改进
决策引擎是否可以将决策配置转移到 DB 中每次配置调整后可以实时生效API中是否可以按不同的业务传入一个业务唯一id如决策码决策出一个boolean或决策出一个String内容简化业务接入放的使用