日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

強(qiáng)烈推薦強(qiáng)大的規(guī)則引擎框架LiteFlow

來源: 責(zé)編: 時(shí)間:2024-02-29 14:43:50 246觀看
導(dǎo)讀環(huán)境:SpringBoot2.7.161. 簡(jiǎn)介L(zhǎng)iteFlow是一個(gè)非常強(qiáng)大的現(xiàn)代化的規(guī)則引擎框架,融合了編排特性和規(guī)則引擎的所有特性。在每個(gè)公司的系統(tǒng)中,總有一些擁有復(fù)雜業(yè)務(wù)邏輯的系統(tǒng),這些系統(tǒng)承載著核心業(yè)務(wù)邏輯,幾乎每個(gè)需求都和這

環(huán)境:SpringBoot2.7.164dy28資訊網(wǎng)——每日最新資訊28at.com


1. 簡(jiǎn)介

LiteFlow是一個(gè)非常強(qiáng)大的現(xiàn)代化的規(guī)則引擎框架,融合了編排特性和規(guī)則引擎的所有特性。4dy28資訊網(wǎng)——每日最新資訊28at.com

在每個(gè)公司的系統(tǒng)中,總有一些擁有復(fù)雜業(yè)務(wù)邏輯的系統(tǒng),這些系統(tǒng)承載著核心業(yè)務(wù)邏輯,幾乎每個(gè)需求都和這些核心業(yè)務(wù)有關(guān),這些核心業(yè)務(wù)業(yè)務(wù)邏輯冗長(zhǎng),涉及內(nèi)部邏輯運(yùn)算,緩存操作,持久化操作,外部資源調(diào)取,內(nèi)部其他系統(tǒng)RPC調(diào)用等等。時(shí)間一長(zhǎng),項(xiàng)目幾經(jīng)易手,維護(hù)成本就會(huì)越來越高。各種硬代碼判斷,分支條件越來越多。代碼的抽象,復(fù)用率也越來越低,各個(gè)模塊之間的耦合度很高。一小段邏輯的變動(dòng),會(huì)影響到其他模塊,需要進(jìn)行完整回歸測(cè)試來驗(yàn)證。如要靈活改變業(yè)務(wù)流程的順序,則要進(jìn)行代碼大改動(dòng)進(jìn)行抽象,重新寫方法。實(shí)時(shí)熱變更業(yè)務(wù)流程,幾乎很難實(shí)現(xiàn)。LiteFlow為解耦邏輯而生,為編排而生,在使用LiteFlow之后,你會(huì)發(fā)現(xiàn)打造一個(gè)低耦合,靈活的系統(tǒng)會(huì)變得易如反掌!4dy28資訊網(wǎng)——每日最新資訊28at.com

LiteFlow優(yōu)勢(shì)

利用LiteFlow,你可以將瀑布流式的代碼,轉(zhuǎn)變成以組件為核心概念的代碼結(jié)構(gòu),這種結(jié)構(gòu)的好處是可以任意編排,組件與組件之間是解耦的,組件可以用腳本來定義,組件之間的流轉(zhuǎn)全靠規(guī)則來驅(qū)動(dòng)。LiteFlow擁有開源規(guī)則引擎最為簡(jiǎn)單的DSL語法。十分鐘就可上手。4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

組件可實(shí)時(shí)熱更替,也可以給編排好的邏輯流里實(shí)時(shí)增加一個(gè)組件,從而改變你的業(yè)務(wù)邏輯。4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

LiteFlow的腳本組件,支持眾多腳本語言,完全和Java打通,你可以用腳本來實(shí)現(xiàn)任何邏輯。4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

LiteFlow支持把編排規(guī)則和腳本放在數(shù)據(jù)庫,注冊(cè)中心中,還有可以任意擴(kuò)展的接口,方便你定制。4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

LiteFlow支持你能夠想象處理的任何邏輯流程,如下流程:4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

規(guī)則文件

LiteFlow支持3中格式的規(guī)則文件定義:XML,JSON,YML。以下是XML示例:4dy28資訊網(wǎng)——每日最新資訊28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><flow>    <chain name="example_01">        THEN(a, b, c)    </chain></flow>

規(guī)則說明

THNE:串行執(zhí)行,a執(zhí)行===》執(zhí)行b===》執(zhí)行c4dy28資訊網(wǎng)——每日最新資訊28at.com

WHEN:并行執(zhí)行4dy28資訊網(wǎng)——每日最新資訊28at.com

<chain name="chain1">    WHEN(a, b, c);</chain>

SWITCH:選擇執(zhí)行4dy28資訊網(wǎng)——每日最新資訊28at.com

<chain name="chain1">    SWITCH(a).to(b, c, d);</chain>

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

IF:條件執(zhí)行4dy28資訊網(wǎng)——每日最新資訊28at.com

IF二元4dy28資訊網(wǎng)——每日最新資訊28at.com

<chain name="chain1">    THEN(        IF(x, a),        b    );</chain>

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

其中x為條件節(jié)點(diǎn),為真的情況下,執(zhí)行鏈路就為x->a->b,為假鏈路就為x->b。4dy28資訊網(wǎng)——每日最新資訊28at.com

IF三元4dy28資訊網(wǎng)——每日最新資訊28at.com

<chain name="chain1">    THEN(        IF(x, a, b),        c    );</chain>

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

還有其它很多的規(guī)則,這里不一一舉例,可以查看官網(wǎng)。4dy28資訊網(wǎng)——每日最新資訊28at.com

2. 實(shí)戰(zhàn)案例

環(huán)境配置4dy28資訊網(wǎng)——每日最新資訊28at.com

<dependency>  <groupId>com.yomahub</groupId>  <artifactId>liteflow-spring-boot-starter</artifactId>  <version>2.11.4.2</version></dependency>

配置文件4dy28資訊網(wǎng)——每日最新資訊28at.com

#liteflow 配置liteflow:  rule-source: flows/*.el.xml


4dy28資訊網(wǎng)——每日最新資訊28at.com

整個(gè)規(guī)則流程執(zhí)行如下4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com


4dy28資訊網(wǎng)——每日最新資訊28at.com

規(guī)則定義4dy28資訊網(wǎng)——每日最新資訊28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><flow>    <chain name="processOrder">        THEN(          initOrder,           IF(amount, discountOrder),          SWITCH(userType).to(vipDiscountOrder, normalDiscountOrder),          completeOrder        )    </chain></flow>

這里的initOrder,amount,discountOrder等都是具體Node接口是bean的名稱。4dy28資訊網(wǎng)——每日最新資訊28at.com

初始化訂單組件

@Component("initOrder")public class InitOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("初始化訂單...") ;    Order order = this.getContextBean(Order.class) ;    double sum = order.getItems().stream().mapToDouble(item -> {      return item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).doubleValue() ;    }).sum() ;    order.setTotalAmount(BigDecimal.valueOf(sum));  }}

這里只做了計(jì)算訂單總額。4dy28資訊網(wǎng)——每日最新資訊28at.com

判斷訂單總額節(jié)點(diǎn)
4dy28資訊網(wǎng)——每日最新資訊28at.com

@Component("amount")public class AmountComponent extends NodeIfComponent {  @Override  public boolean processIf() throws Exception {    System.out.println("判斷總金額,超過100元打折") ;    Order order = this.getContextBean(Order.class) ;    return order.getTotalAmount().doubleValue() >= 100D ;  }}

用戶類型判斷,執(zhí)行哪個(gè)節(jié)點(diǎn)4dy28資訊網(wǎng)——每日最新資訊28at.com

@Component("userType")public class UserTypeComponent extends NodeSwitchComponent {  @Override  public String processSwitch() throws Exception {    User user = this.getContextBean(User.class) ;    if (user.isVip()) {      return "vipDiscountOrder" ;    }    return "normalDiscountOrder" ;  }}

上面返回的是具體節(jié)點(diǎn)的beanName。4dy28資訊網(wǎng)——每日最新資訊28at.com

VIP折扣節(jié)點(diǎn)
4dy28資訊網(wǎng)——每日最新資訊28at.com

@Component("vipDiscountOrder")public class VIPDiscountOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("VIP會(huì)員打9折") ;    Order order = this.getContextBean(Order.class) ;    order.setTotalAmount(order.getTotalAmount().multiply(BigDecimal.valueOf(9)).divide(BigDecimal.valueOf(10), RoundingMode.HALF_UP)) ;  }}

普通會(huì)員折扣節(jié)點(diǎn)4dy28資訊網(wǎng)——每日最新資訊28at.com

@Component("normalDiscountOrder")public class NormalDiscountOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("普通會(huì)員不打折") ;  }}

完成節(jié)點(diǎn)4dy28資訊網(wǎng)——每日最新資訊28at.com

@Component("completeOrder")public class CompleteOrderComponent extends NodeComponent  {  @Override  public void process() throws Exception {    System.out.println("訂單折扣執(zhí)行完成,最后收尾...") ;  }}

以上是該規(guī)則流程的所有配置及定義。接下來進(jìn)行測(cè)試4dy28資訊網(wǎng)——每日最新資訊28at.com

// 直接注入該類進(jìn)行規(guī)則流程的啟動(dòng)執(zhí)行@Resourceprivate FlowExecutor flowExecutor;@Testpublic void testExample02() {  Order order = new Order() ;  order.setId(1L) ;  order.setSno("S001") ;  List<OrderItem> items = new ArrayList<>() ;  items.add(new OrderItem(1L, 2, BigDecimal.valueOf(22))) ;  items.add(new OrderItem(2L, 1, BigDecimal.valueOf(24.5))) ;  items.add(new OrderItem(3L, 5, BigDecimal.valueOf(66.3))) ;  order.setItems(items) ;  User user = new User() ;  user.setId(1L) ;  user.setVip(false) ;  LiteflowResponse response = flowExecutor.execute2Resp("processOrder", null, order, user);  if (!response.isSuccess()) {    Exception e = response.getCause() ;    e.printStackTrace() ;  } else {    System.out.println("流程成功執(zhí)行...") ;    System.out.println("最終應(yīng)付款:" + response.getContextBean(Order.class).getTotalAmount().doubleValue()) ;  }}

控制臺(tái)將會(huì)輸出詳細(xì)的信息。4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

修改用戶類型后執(zhí)行4dy28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4dy28資訊網(wǎng)——每日最新資訊28at.com

以上是本篇文章的全部?jī)?nèi)容,希望對(duì)你有所幫助。4dy28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-75360-0.html強(qiáng)烈推薦強(qiáng)大的規(guī)則引擎框架LiteFlow

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Vue3問題:如何實(shí)現(xiàn)拼圖驗(yàn)證+郵箱登錄功能?前后端!

下一篇: 掌握 Python 棧,輕松實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久婷婷影院| 亚洲欧美日韩国产一区| 国产午夜精品视频| 国产视频自拍一区| 亚洲高清自拍| 一本色道久久88精品综合| 亚洲天堂网在线观看| 欧美一区二区性| 免费观看日韩av| 欧美特黄一区| 韩国女主播一区| 亚洲国内自拍| 亚洲先锋成人| 久久蜜桃精品| 欧美色播在线播放| 国产亚洲欧美日韩日本| 亚洲精品乱码久久久久久蜜桃麻豆| 在线亚洲美日韩| 久久精品99| 欧美日韩免费高清| 好看的av在线不卡观看| 一区二区国产日产| 久久精品99久久香蕉国产色戒| 欧美激情中文字幕一区二区| 国产美女一区| 亚洲裸体视频| 久久久免费av| 国产精品丝袜白浆摸在线| 136国产福利精品导航网址| 亚洲在线免费视频| 欧美高清你懂得| 国产午夜精品在线| 在线视频日韩| 免费国产自线拍一欧美视频| 国产精品一区视频| 日韩亚洲欧美一区二区三区| 久久久久一区二区三区| 国产精品国产三级国产普通话99| 在线精品国产欧美| 午夜精品久久久久久久男人的天堂 | 男女视频一区二区| 国产日本亚洲高清| 一本色道精品久久一区二区三区 | 久久在线视频| 国产精品综合| 亚洲精品日日夜夜| 久久综合久久综合这里只有精品| 国产精品久久久久一区二区| 亚洲精品国产精品国自产观看浪潮| 久久精品亚洲国产奇米99| 国产精品theporn| 亚洲精品小视频在线观看| 久久久久中文| 国产无一区二区| 亚洲综合日韩在线| 欧美日韩精品| 亚洲欧洲在线视频| 裸体丰满少妇做受久久99精品| 国产农村妇女精品一区二区| 欧美伦理影院| 亚洲激情小视频| 久久美女性网| 国产一区激情| 欧美一区午夜精品| 国产精品一卡| 亚洲在线免费| 欧美美女福利视频| 91久久在线播放| 欧美成人午夜激情在线| 精品av久久707| 欧美一区亚洲二区| 国产欧美日韩在线| 亚洲欧美色一区| 国产精品毛片a∨一区二区三区|国| 亚洲伦理在线免费看| 欧美电影免费观看大全| 亚洲国产电影| 欧美3dxxxxhd| 136国产福利精品导航| 久久久夜夜夜| 韩国一区二区三区在线观看| 欧美主播一区二区三区美女 久久精品人 | 一区二区三区日韩精品视频| 欧美久久久久中文字幕| 亚洲精品一区二| 欧美人与禽猛交乱配视频| 亚洲乱码精品一二三四区日韩在线| 欧美大片91| 亚洲麻豆国产自偷在线| 欧美精品久久久久久久久久| 亚洲理伦电影| 欧美日韩视频在线观看一区二区三区| 亚洲毛片一区| 欧美视频一区二| 亚洲欧美激情一区| 国产视频久久| 久久久久久9| 亚洲国产导航| 欧美日韩免费观看一区三区 | 亚洲乱码精品一二三四区日韩在线| 欧美日韩www| 亚洲一区二区三区涩| 国产精品亚洲片夜色在线| 欧美在线一二三| 影音先锋亚洲视频| 欧美电影免费网站| 99综合视频| 国产精品视频久久| 欧美影院视频| 亚洲成人资源网| 欧美日韩高清一区| 亚洲欧美影音先锋| 国内成+人亚洲+欧美+综合在线| 久热爱精品视频线路一| 亚洲精品欧美精品| 国产精品久久久久久福利一牛影视 | 国产精品美女在线观看| 欧美一区国产一区| 亚洲成人中文| 欧美视频在线观看一区| 欧美专区日韩视频| 亚洲国产成人精品久久久国产成人一区 | 久久精品国产久精国产爱| 亚洲电影av在线| 欧美视频网站| 久久精品视频va| 亚洲精品一区二区三区不| 国产精品久久久久婷婷| 久久免费视频在线| 99精品黄色片免费大全| 国产日韩欧美视频| 欧美激情综合亚洲一二区| 亚洲欧美日韩在线播放| 亚洲电影有码| 国产精品免费观看视频| 狼狼综合久久久久综合网| 亚洲视频在线视频| 在线观看日韩av| 欧美视频精品在线观看| 久久久在线视频| 亚洲亚洲精品在线观看 | 国产精品乱人伦一区二区| 久久网站热最新地址| 亚洲小视频在线| 亚洲国产美女| 国产麻豆午夜三级精品| 欧美激情第一页xxx| 久久爱www久久做| 一区二区三区四区国产| 一色屋精品亚洲香蕉网站| 欧美性视频网站| 欧美激情二区三区| 久久激情综合网| 亚洲在线成人精品| 亚洲精品一级| 精品电影在线观看| 国产精品嫩草久久久久| 欧美黄色日本| 久久九九精品| 亚洲欧洲av一区二区| 亚洲精品免费一二三区| 国际精品欧美精品| 国产精品手机在线| 欧美日韩黄视频| 美女精品自拍一二三四| 久久激情综合| 午夜精彩国产免费不卡不顿大片| 亚洲精品小视频| 亚洲国产精品国自产拍av秋霞| 国产日韩精品在线观看| 欧美亚州一区二区三区| 欧美黑人一区二区三区| 美女精品在线观看| 久久久久成人网| 新67194成人永久网站| 中文国产成人精品| 亚洲免费观看视频| 亚洲高清自拍| 在线观看成人网| 国产综合av| 国产视频久久久久| 国产精品日韩欧美综合| 欧美视频在线观看免费网址| 欧美剧在线免费观看网站| 欧美 日韩 国产在线 | 国产欧美1区2区3区| 国产精品福利av| 欧美视频日韩视频在线观看| 欧美日韩黄色大片| 欧美精品一区二区久久婷婷| 亚洲欧洲精品一区二区| 极品中文字幕一区| 激情成人综合| 狠狠色综合日日| 狠色狠色综合久久| 狠狠干狠狠久久| 精品99视频| 亚洲国产高清一区二区三区| 伊人色综合久久天天| 在线成人小视频| 亚洲电影免费在线观看| 亚洲国产精品电影在线观看| 亚洲国产精品一区二区第一页 | 欧美国产日韩精品免费观看|