0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是流程/規(guī)則編排

lhl545545 ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2022-09-21 10:04 ? 次閱讀

什么是流程/規(guī)則編排?

所謂編排,就是讓已有的節(jié)點(diǎn)通過不同的組織方式完成不同的需求 首先,我們需要對(duì)既有業(yè)務(wù)做一定程度的抽象,以一個(gè)例子開始:一個(gè)簡(jiǎn)單的國慶節(jié)充值活動(dòng): 活動(dòng)時(shí)間 10.1-10.7 充值≥100 元,送 5 元余額 充值≥50 元,送 10 積分,10.5 之后開始

不疊加送, 即充 100 元只送 5 元余額不會(huì)疊加再送 10 積分

當(dāng)充值發(fā)生時(shí),我們擁有:充值用戶-uid,充值金額-cost,充值時(shí)間-time再有一些制作好的抽象節(jié)點(diǎn),如:

判斷充值≥100 的條件節(jié)點(diǎn) ScoreFlow-100,cost≥100 返回 true,否則返回 false

判斷充值≥50 的條件節(jié)點(diǎn) ScoreFlow-50,cost≥50 返回 true,否則返回 false

發(fā)放 5 元余額的結(jié)果節(jié)點(diǎn) AmountResult,結(jié)果也可以有返回,比如正常發(fā)放了返回 true,庫存不足了等原因?qū)е碌臎]有發(fā)放(不是error),可以返回 false

發(fā)放 10 元積分的結(jié)果節(jié)點(diǎn) PointResult

那么,為什么要編排,如何編排才是最優(yōu)的?

為什么要編排?

屏蔽代碼影響: 比如編排者只需要知道 AmountResult 是發(fā)放余額的節(jié)點(diǎn),然后在適當(dāng)?shù)奈恢眠\(yùn)行這個(gè)節(jié)點(diǎn)即可,不需要關(guān)心真實(shí)的代碼邏輯 提升效率: 結(jié)合可視化給非研發(fā)人員編排實(shí)現(xiàn)業(yè)務(wù)邏輯,支持動(dòng)態(tài)修改與生效配置,比如充值條件 100 元改成 200,結(jié)合可視化工具直接修改,解放研發(fā),提升生產(chǎn)效率

如何編排?

流程圖式編排

acc0697c-3727-11ed-ba43-dac502259ad0.png

腦海里最先出現(xiàn)的編排方式,也是最常見的編排方式

執(zhí)行樹式編排

When X Then Y

accf851a-3727-11ed-ba43-dac502259ad0.png

以上兩種基本代表了傳統(tǒng)的編排思想,在簡(jiǎn)單的例子下,看起來也是非常直觀,但,當(dāng)變動(dòng)發(fā)生時(shí),尤其是需要靈活調(diào)整的場(chǎng)景,他們的表現(xiàn)又如何呢?

變動(dòng)

①簡(jiǎn)單配置修改

充值 100 元改成 80 吧,10 積分變 20 積分吧,時(shí)間改成 10.9 號(hào)結(jié)束吧(微微一笑,畢竟我費(fèi)了這么大勁,終于體現(xiàn)到價(jià)值了?。?/p>

②簡(jiǎn)單邏輯變動(dòng)

用戶參與積極性不高啊,去掉不疊加送吧,都送(稍加思索,費(fèi)幾個(gè)腦細(xì)胞挪一挪還是可以的,怎么也比改代碼再上線強(qiáng)吧?。?/p>

③進(jìn)階邏輯變動(dòng)

5元余額不能送太多,設(shè)置個(gè)庫存100個(gè)吧,對(duì)了,庫存不足了充100元還是得送10積分的哈(卒… 早知道還不如硬編碼了)

真實(shí)線上變動(dòng)只會(huì)更離譜,流程圖式和執(zhí)行樹式實(shí)現(xiàn)的主要缺點(diǎn)在于,牽一發(fā)而動(dòng)全身,改動(dòng)一個(gè)節(jié)點(diǎn)需要瞻前顧后,如果考慮不到位,很容易弄錯(cuò),現(xiàn)實(shí)的活動(dòng)內(nèi)容要比例子復(fù)雜的多,時(shí)間線也是多條,考慮到這,再加上使用學(xué)習(xí)框架的成本,往往得不償失,到頭來發(fā)現(xiàn)還不如硬編碼

那么,有沒有更好的編排邏輯?

ice是如何編排的

ace0adae-3727-11ed-ba43-dac502259ad0.png

如圖,ice使用關(guān)系節(jié)點(diǎn)作為邏輯傳遞的橋梁,用樹圖方式呈現(xiàn)邏輯

關(guān)系節(jié)點(diǎn)(邏輯節(jié)點(diǎn))

控制業(yè)務(wù)流轉(zhuǎn),如: AND: 從上到下執(zhí)行子節(jié)點(diǎn),遇到第一個(gè)false中斷并返回false,全部為true則返回true,類似于 Java 的 && ANY: 從上到下執(zhí)行子節(jié)點(diǎn),遇到第一個(gè)True中斷并返回true,全部為false則返回false,類似于 Java 的 || ALL: 從上到下執(zhí)行所有子節(jié)點(diǎn)

葉子節(jié)點(diǎn)(業(yè)務(wù)節(jié)點(diǎn))

真正做事情的節(jié)點(diǎn),如: Flow: 一些條件與規(guī)則節(jié)點(diǎn),如ScoreFlow Result: 一些結(jié)果性質(zhì)的節(jié)點(diǎn),如AmountResult,PointResult None: 一些不會(huì)干預(yù)流程的節(jié)點(diǎn),如下文會(huì)介紹到的TimeChangeNone

執(zhí)行流程

圖中,如果10月4日,充值100元,則執(zhí)行流程為:

從根節(jié)點(diǎn)開始,先執(zhí)行ANY

充值時(shí)間在ANY生效時(shí)間內(nèi),繼續(xù)執(zhí)行

ANY有兩個(gè)子節(jié)點(diǎn),先執(zhí)行第一個(gè)子節(jié)點(diǎn)AND

AND有兩個(gè)子節(jié)點(diǎn),先執(zhí)行第一個(gè)子節(jié)點(diǎn)ScoreFlow-100

ScoreFlow-100判斷并返回true

AND接收到true,繼續(xù)向下執(zhí)行AmountResult

AmountResult發(fā)放余額并返回true

AND子節(jié)點(diǎn)執(zhí)行完畢,接收到兩個(gè)true,自己也返回true

ANY接收到true,不再繼續(xù)執(zhí)行子節(jié)點(diǎn)并返回true

可以看到,之前需要?jiǎng)冸x出的時(shí)間,已經(jīng)融合到各個(gè)節(jié)點(diǎn)上了,把時(shí)間配置還給節(jié)點(diǎn),如果沒到執(zhí)行時(shí)間,如發(fā)放積分的節(jié)點(diǎn) 10月5日之后才生效,那么在 10月5日之前,可以理解為這個(gè)節(jié)點(diǎn)不存在

變動(dòng)的解決

對(duì)于直接修改節(jié)點(diǎn)配置就可以 對(duì)于直接把ANY 改成 ALL 即可(疊加送與不疊加送的邏輯在這個(gè)節(jié)點(diǎn)上,屬于這個(gè)節(jié)點(diǎn)的邏輯就該由這個(gè)節(jié)點(diǎn)去解決) 對(duì)于由于庫存的不足,相當(dāng)于沒有給用戶發(fā)放,則 AmountResult 返回 false,流程還會(huì)繼續(xù)向下執(zhí)行,不用做任何更改 再加一個(gè)棘手的問題,當(dāng)時(shí)間線復(fù)雜時(shí),測(cè)試工作以及測(cè)試并發(fā)要怎么做?

一個(gè) 10月1日開始的活動(dòng),一定是在 10月1日之前開發(fā)上線完畢,如我在 9月15日要怎么去測(cè)試一個(gè)10月1日開始的活動(dòng)?在 ice 中,只需要稍微修改一下:

acf1523a-3727-11ed-ba43-dac502259ad0.png

增加了個(gè)子節(jié)點(diǎn)TimeChangeNone(用于更改測(cè)試環(huán)境請(qǐng)求里的充值時(shí)間,可以改成任意想要的測(cè)試時(shí)間)

特性

為什么這么編排呢?為什么這樣就能解決這些變動(dòng)與問題呢?

其實(shí),就是使用樹形結(jié)構(gòu)解耦,流程圖式和執(zhí)行樹式實(shí)現(xiàn)在改動(dòng)邏輯的時(shí)候,需要瞻前顧后,但是 ice 不需要,ice 的業(yè)務(wù)邏輯都在本節(jié)點(diǎn)上,每一個(gè)節(jié)點(diǎn)都可以代表單一邏輯,比如我改不疊加送變成疊加送這一邏輯就只限制在那個(gè) ANY 節(jié)點(diǎn)邏輯上,只要把它改成我想要的邏輯即可,至于子節(jié)點(diǎn)有哪些,不用特別在意,節(jié)點(diǎn)之間通過上下文傳遞信息,每個(gè)節(jié)點(diǎn)執(zhí)行完的后續(xù)流程不需要自己指定

因?yàn)樽约簣?zhí)行完后的執(zhí)行流程不再由自己掌控,還可以做到對(duì)象級(jí)別的復(fù)用:

ad0691a4-3727-11ed-ba43-dac502259ad0.png

如圖,參與活動(dòng)這里用到的 TimeChangeNone,如果現(xiàn)在還有個(gè) H5 頁面需要做呈現(xiàn),不同的呈現(xiàn)也與時(shí)間相關(guān),怎么辦?只需要在呈現(xiàn)活動(dòng)這里使用同一個(gè)節(jié)點(diǎn)對(duì)象(在ice后臺(tái)配置中為同id節(jié)點(diǎn)),更改其中一個(gè),另一個(gè)也會(huì)被更新(因?yàn)樗麄兪峭粋€(gè)對(duì)象,不存在多個(gè)復(fù)用節(jié)點(diǎn)同步問題),避免了到處修改時(shí)間

Code

Talk is cheap. Show me the code…

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    946

    瀏覽量

    54872
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4802

    瀏覽量

    68743
  • 抽象
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    5589

原文標(biāo)題:編排流程/規(guī)則,編排本身也需要很深的邏輯思考!

文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【mBot試用體驗(yàn)】音樂編排

    最近一個(gè)月的考試月,要到大概下周才能解脫。所以論壇工作人員都來催我更帖子了,實(shí)在是羞愧。我拿到小車感覺還是很惘然,看了看當(dāng)初自己申請(qǐng)這個(gè)mbot的申請(qǐng)貼才找到方向。當(dāng)初自己是為了做一個(gè)編排舞蹈才申請(qǐng)
    發(fā)表于 01-15 01:20

    K8S容器編排的互通測(cè)試

    K8S容器編排之NetWorkPolicy官方實(shí)例
    發(fā)表于 06-06 11:28

    PCB設(shè)計(jì)流程規(guī)則

    PCB設(shè)計(jì)流程PCB規(guī)則設(shè)置設(shè)計(jì)規(guī)則的單位跟隨畫布屬性里設(shè)置的單位,此處單位是mil。導(dǎo)線線寬最小為10mil;不同網(wǎng)絡(luò)元素之間最小間距為8mil;孔外徑為24mil,孔內(nèi)徑為12mil;線長(zhǎng)不做
    發(fā)表于 01-11 06:14

    IAR環(huán)境如何將數(shù)學(xué)函式庫編排到sLib保護(hù)區(qū)

    IAR環(huán)境如何將數(shù)學(xué)函式庫編排到sLib保護(hù)區(qū)在IAR 環(huán)境下,如何將數(shù)學(xué)函式庫編排到SLIB 保護(hù)區(qū)?
    發(fā)表于 10-20 07:03

    基于規(guī)則的RADIUS Server設(shè)計(jì)與實(shí)現(xiàn)

             本文在分析RADIUS 協(xié)議原理基礎(chǔ)上,給出了一種基于規(guī)則的RADIUS Server 的設(shè)計(jì)方案和實(shí)現(xiàn)策略,規(guī)則的引入可以很方便在規(guī)則
    發(fā)表于 09-14 08:20 ?23次下載

    LCD漢字編排軟件

    LCD漢字編排軟件LCD漢字編排軟件LCD漢字編排軟件LCD漢字編排軟件
    發(fā)表于 12-28 14:31 ?7次下載

    PCB設(shè)計(jì)的規(guī)則流程及注意事項(xiàng)介紹

    PCB設(shè)計(jì)規(guī)則、層定義、過孔設(shè)置、CAM輸出設(shè)置已經(jīng)作成缺省啟動(dòng)文件,名稱為Default.stp,網(wǎng)表輸入進(jìn)來以后,按照設(shè)計(jì)的實(shí)際情況,把電源網(wǎng)絡(luò)和地分配給電源層和地層,并設(shè)置其它高級(jí)規(guī)則。在所
    發(fā)表于 04-30 12:00 ?5795次閱讀

    基于網(wǎng)絡(luò)切片的無線虛擬化帶寬資源編排算法

    為在無線虛擬化環(huán)境下進(jìn)行高效的帶寬資源分配,研究基于增強(qiáng)型移動(dòng)寬帶(eMBB)與高可靠低時(shí)延通寬資源編排問題型網(wǎng)絡(luò),將帶寬資源編排冋題簡(jiǎn)化為帶寬資源分配冋題并給出全局對(duì)大型網(wǎng)絡(luò),結(jié)寬資源編排問題轉(zhuǎn)化
    發(fā)表于 05-25 15:09 ?2次下載

    基于多云網(wǎng)絡(luò)架構(gòu)的應(yīng)用編排混合部署研究

    基于多云網(wǎng)絡(luò)架構(gòu)的應(yīng)用編排混合部署研究
    發(fā)表于 06-30 15:50 ?4次下載

    AD16_PCB全流程#04——規(guī)則設(shè)計(jì)

    #04——規(guī)則設(shè)計(jì)規(guī)則設(shè)計(jì)#04——規(guī)則設(shè)計(jì)1.間距設(shè)置2.線寬設(shè)置3.電源線寬設(shè)置4.過孔設(shè)置5.鋪銅設(shè)置6.絲印設(shè)置1.間距設(shè)置2.線寬設(shè)置3.電源線寬設(shè)置4.過孔設(shè)置5.鋪銅設(shè)置6.絲印設(shè)置
    發(fā)表于 11-06 17:21 ?52次下載
    AD16_PCB全<b class='flag-5'>流程</b>#04——<b class='flag-5'>規(guī)則</b>設(shè)計(jì)

    詳解Xpedition規(guī)則驅(qū)動(dòng)設(shè)計(jì)

    本期Xpedition入門指南進(jìn)行規(guī)則的設(shè)置,規(guī)則設(shè)置貫穿在全流程當(dāng)中,比如原理圖設(shè)計(jì)階段就可以進(jìn)行規(guī)則的設(shè)計(jì),布局布線階段可詳細(xì)設(shè)計(jì)高速規(guī)則
    的頭像 發(fā)表于 04-29 13:35 ?1.2w次閱讀

    算力網(wǎng)絡(luò)——編排管理關(guān)鍵技術(shù)

      面對(duì)高復(fù)雜度的算網(wǎng)環(huán)境,以及按需定制、靈活高效的需求特性,在編排管理層需構(gòu)建一體編排 、融數(shù)注智的 “算網(wǎng)大腦”。通過引入一體編排、算力解構(gòu)、泛在調(diào)度等技術(shù),協(xié)同調(diào)度算網(wǎng)各域資源。同時(shí)與AI
    發(fā)表于 05-24 16:35 ?1次下載
    算力網(wǎng)絡(luò)——<b class='flag-5'>編排</b>管理關(guān)鍵技術(shù)

    面向UltraScale+的隔離設(shè)計(jì)流程(IDF)規(guī)則/指南

    電子發(fā)燒友網(wǎng)站提供《面向UltraScale+的隔離設(shè)計(jì)流程(IDF)規(guī)則/指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 11:36 ?0次下載
    面向UltraScale+的隔離設(shè)計(jì)<b class='flag-5'>流程</b>(IDF)<b class='flag-5'>規(guī)則</b>/指南

    Bamboo-pipeline:Python高效流程編排引擎

    Bamboo-pipeline 是藍(lán)鯨智云旗下SaaS標(biāo)準(zhǔn)運(yùn)維的流程編排引擎。其具備以下特點(diǎn): 多種流程模式 :支持串行、并行,支持子流程,可以根據(jù)全局參數(shù)自動(dòng)選擇分支執(zhí)行,節(jié)點(diǎn)失敗處
    的頭像 發(fā)表于 10-31 16:39 ?1023次閱讀
    Bamboo-pipeline:Python高效<b class='flag-5'>流程</b><b class='flag-5'>編排</b>引擎

    行云流水線 滿足你對(duì)工作流編排的一切幻想~skr

    的核心組成部分,旨在加速軟件交付、提高質(zhì)量和實(shí)現(xiàn)持續(xù)改進(jìn)。流水線的核心是流水線模型,是實(shí)現(xiàn)工作流編排,執(zhí)行的重要基石,一個(gè)優(yōu)秀的流水線模型可以覆蓋用戶更多的實(shí)踐場(chǎng)景,按照用戶的所思所想支持編排相應(yīng)的工作流程,通過模型的分層設(shè)計(jì),
    的頭像 發(fā)表于 08-05 13:42 ?293次閱讀