国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

告別 if-else 噩夢:流程編排技術(shù)真的太香了!

0
分享至

Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎(chǔ)、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計、大廠真題等,在線隨時刷題!

作為一個優(yōu)秀的程序員,要守住職業(yè)的底線。能簡單快速的完成的一件事,就一定要用簡單的方案快速完成。不可過度的設(shè)計,始終保持系統(tǒng)的簡潔!

曾幾何時,我對于流程編排這件事 嗤之以鼻,為什么呢?我認為流程編排是典型地過度設(shè)計。

在我看來,代碼越直觀越可靠,我不喜歡看代碼的時候跳來跳去。但是流程編排后,要把各個方法放到擴展類,通過組合各個擴展類新建一個流程,實現(xiàn)業(yè)務(wù)功能,這能有什么好處呢?

直到我來到一個中臺團隊,才意識到流程編排能力是保命的能力。

業(yè)務(wù)中臺要接入很多的業(yè)務(wù)方,每個業(yè)務(wù)方并不是完全相同。很多時候無法完全復(fù)用,需要改造系統(tǒng)適應(yīng)新的業(yè)務(wù)。

新增業(yè)務(wù)代碼時,務(wù)必要保證原有業(yè)務(wù)不受影響,如果沒有流程編排能力,就會充斥大量的 if else 。

if (biz == BizA || biz == BizB) {      //do some thing      //這部分邏輯相同      if (biz == BizA) {          //差異化處理      }            if(biz == BizB) {         //差異化邏輯      } }

例如上面的代碼,不同的業(yè)務(wù)線若有差異化邏輯,需要新增分支單獨處理。想象一下,當(dāng)有 10 多個業(yè)務(wù)接入了你的系統(tǒng),那么一定讓人抓狂……

任何一個人都無法保證對 10 多種業(yè)務(wù)完全熟悉,每個人可能只負責(zé) 1 個業(yè)務(wù),然而如果沒有代碼邏輯的隔離,維護者只能在千絲萬縷中,才能找到目標代碼邏輯。更可怕的是,每次新增一個業(yè)務(wù),需要在原有的屎山中繼續(xù),不斷新增 if else。直到有一天,有一個倒霉蛋改錯了代碼,導(dǎo)致其他重要業(yè)務(wù)受影響,引發(fā)線上故障。

想象一下,當(dāng)你改了幾行代碼以后,要求測試同學(xué),回歸10 多個業(yè)務(wù)線的全部邏輯?這顯然不現(xiàn)實。

以上的問題和痛點可歸納為:代碼隔離性和業(yè)務(wù)擴展點問題。解決這兩類問題有如下手段!

  • 使用流程引擎,為不同的業(yè)務(wù)配置不同的流程執(zhí)行鏈

  • 使用插件擴展引擎,不同的業(yè)務(wù)實現(xiàn)差異化部分。

MemberClub 中大量使用流程引擎和插件擴展引擎解決業(yè)務(wù)隔離性和擴展性 問題。

MemberClub是托管在Gitee平臺的開源項目,提供了付費會員的交易解決方案,在各類購買場景下提供各類會員形態(tài)的履約及售后結(jié)算能力,具體介紹可參見

https://gitee.com/juejinwuyang/memberclub

配置流程執(zhí)行鏈

考慮到不同的會員產(chǎn)品交易提單流程不同,不同的產(chǎn)品應(yīng)配置不同的流程,DemoMemberPurchaseExtension實現(xiàn)了購買擴展點,并且定義了三個流程執(zhí)行鏈的配置方式。如截圖所示~


定義流程節(jié)點

流程節(jié)點中的方法包括process、successrollbackcallback方法。


流程執(zhí)行

流程執(zhí)行時 需提供流程上下文對象。調(diào)用FlowChain.execute方法即可


實際執(zhí)行階段,各個流程節(jié)點被流程引擎串聯(lián)起來依次執(zhí)行,類似于責(zé)任鏈的設(shè)計模式,具體執(zhí)行順序如下圖所示。

依次執(zhí)行每個流程節(jié)點的process方法,若process方法出現(xiàn)異常,則執(zhí)行rollback方法。若所有的process方法執(zhí)行成功,則倒序依次執(zhí)行success方法。


流程引擎執(zhí)行原理

以下是FlowChain.execute方法執(zhí)行原理。

public    void execute(FlowChain chain, T context)  {     Exception exception = null;     int index = -1;     for (FlowNode node : chain.getNodes()) {         try {             node.process(context);             index++;         } catch (Exception e) {             if (e instanceof SkipException) {                 CommonLog.warn("當(dāng)前流程:{} 發(fā)出 Skip請求,后續(xù)流程不再執(zhí)行", node.getClass().getSimpleName());                 break;             }             exception = e;             break;         }     }     if (exception != null) {         for (int i = index; i >= 0; i--) {             FlowNode node = chain.getNodes().get(i);             try {                 node.rollback(context, exception);             } catch (Exception e) {                 CommonLog.error("rollback執(zhí)行異常,忽略 name:{}", node.getClass().getSimpleName(), e);             }         }     } else {         for (int i = index; i >= 0; i--) {             FlowNode node = chain.getNodes().get(i);             try {                 node.success(context);             } catch (Exception e) {                 CommonLog.error("success 執(zhí)行異常,忽略 name:{}", node.getClass().getSimpleName(), e);             }         }     }     for (int i = index; i >= 0; i--) {         FlowNode node = chain.getNodes().get(i);         try {             node.callback(context, exception);         } catch (Exception e) {             CommonLog.error("callback執(zhí)行異常,忽略 name:{}", node.getClass().getSimpleName(), e);         }     }     if (exception != null) {         throw exception;     } }

以上全部代碼地址,可以參見 MemberClub:

https://gitee.com/-/ide/project/juejinwuyang/memberclub/edit/master/-/memberclub.common/src/main/java/com/memberclub/common/flow/FlowChainService.java

MemberClub是托管在Gitee平臺的開源項目,提供了付費會員的交易解決方案,在各類購買場景下提供各類會員形態(tài)的履約及售后結(jié)算能力,一個非常好的項目,適合用來學(xué)習(xí)業(yè)務(wù)中臺系統(tǒng),具體介紹可參見

Gitee開源地址:

https://gitee.com/juejinwuyang/memberclub

GitHub開源地址:

https://github.com/juejin-wuyang/memberclub

在這個項目中你可以學(xué)習(xí)到 SpringBoot 集成 以下框架或組件。

  • Mybatis-plus

  • Sharding-sphere 多數(shù)據(jù)源分庫分表

  • Redis/redisson

  • Apollo

  • Springcloud(feign/enreka)

  • RabbitMQ

  • H2 內(nèi)存數(shù)據(jù)庫

  • Swagger

  • Lombok+MapStruct

同時你也可以學(xué)習(xí)到以下組件的實現(xiàn)原理

  • 流程引擎

  • 擴展點引擎

  • 分布式重試組件

  • 通用日志組件

  • 商品庫存

  • 分布式鎖組件

  • Redis Lua的使用

  • Spring 上下文工具類

來源:https://juejin.cn/post/7469330882945318922

公眾號“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請聯(lián)系,筆者會第一時間刪除處理!

最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復(fù)“加群”,即可入群!

特別推薦:專注分享最前沿的技術(shù)與資訊,為彎道超車做好準備及各種開源項目與高效率軟件的公眾號,「大咖筆記」,專注挖掘好東西,非常值得大家關(guān)注。點擊下方公眾號卡片關(guān)注。

文章有幫助的話,點在看,轉(zhuǎn)發(fā)吧!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點推薦
被曝生下畸形兒傳聞僅1月,闞清子官宣喜訊,連發(fā)三文表明態(tài)度

被曝生下畸形兒傳聞僅1月,闞清子官宣喜訊,連發(fā)三文表明態(tài)度

一口娛樂
2026-01-29 09:31:09
已確認,浙江有大到暴雪!今晚變天

已確認,浙江有大到暴雪!今晚變天

魯中晨報
2026-01-29 13:39:09
不敢置信!女子十二樂坊成員直播養(yǎng)不活自己,一晚上打賞不到3000

不敢置信!女子十二樂坊成員直播養(yǎng)不活自己,一晚上打賞不到3000

云中浮生
2026-01-24 21:37:46
奇葩!35歲女子4年不回家,母親來探望卻被懟,女子:就當(dāng)我死了

奇葩!35歲女子4年不回家,母親來探望卻被懟,女子:就當(dāng)我死了

娛樂帝皇丸
2026-01-28 15:18:51
16歲武漢男生凌晨離家,失聯(lián)超70小時, 父親:未帶手機現(xiàn)金,最后出現(xiàn)在橋上不見蹤跡

16歲武漢男生凌晨離家,失聯(lián)超70小時, 父親:未帶手機現(xiàn)金,最后出現(xiàn)在橋上不見蹤跡

大風(fēng)新聞
2026-01-29 13:53:22
人民日報怒批!炫富、偷稅749萬、跑國外,現(xiàn)又來“割內(nèi)地韭菜”

人民日報怒批!炫富、偷稅749萬、跑國外,現(xiàn)又來“割內(nèi)地韭菜”

小熊侃史
2026-01-18 07:20:09
港股地產(chǎn)股大漲,融創(chuàng)中國漲超30%

港股地產(chǎn)股大漲,融創(chuàng)中國漲超30%

每日經(jīng)濟新聞
2026-01-29 11:39:06
外交部:繼續(xù)深化國際執(zhí)法合作 加大力度打擊網(wǎng)賭電詐

外交部:繼續(xù)深化國際執(zhí)法合作 加大力度打擊網(wǎng)賭電詐

財聯(lián)社
2026-01-29 15:26:24
尼帕病毒來勢洶洶,建議:每家最好備6樣?xùn)|西,關(guān)鍵時刻能救命呢

尼帕病毒來勢洶洶,建議:每家最好備6樣?xùn)|西,關(guān)鍵時刻能救命呢

現(xiàn)代小青青慕慕
2026-01-28 08:59:53
阿富汗的鍋,拜登不背!

阿富汗的鍋,拜登不背!

山河路口
2026-01-28 23:12:39
心理學(xué)上有一個詞叫:梅拉賓法則(搞好人際關(guān)系最好的辦法)

心理學(xué)上有一個詞叫:梅拉賓法則(搞好人際關(guān)系最好的辦法)

經(jīng)濟觀察報
2025-09-01 10:06:25
1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無罪

1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無罪

史海孤雁
2026-01-27 18:02:17
瞞不住了!美媒:美軍高官已進臺島指揮導(dǎo)彈戰(zhàn),戰(zhàn)時先炸福建沿海

瞞不住了!美媒:美軍高官已進臺島指揮導(dǎo)彈戰(zhàn),戰(zhàn)時先炸福建沿海

史智文道
2026-01-29 16:14:14
要打就打痛!中國手段已升級,日本:中方不批準駐重慶總領(lǐng)事任命

要打就打痛!中國手段已升級,日本:中方不批準駐重慶總領(lǐng)事任命

通文知史
2026-01-28 14:30:03
太頂了!明明什么都沒露,卻性感得要命!

太頂了!明明什么都沒露,卻性感得要命!

貴圈真亂
2025-12-20 12:02:06
最新傷勢情況曝光,德約科維奇直言:對辛納絕不舉白旗

最新傷勢情況曝光,德約科維奇直言:對辛納絕不舉白旗

體育妞世界
2026-01-29 12:38:11
起風(fēng)了!加拿大已改口,禁止與中國簽協(xié)定,65萬噸油菜籽白買了?

起風(fēng)了!加拿大已改口,禁止與中國簽協(xié)定,65萬噸油菜籽白買了?

墨印齋
2026-01-29 11:47:54
加快男性衰老的因素:喝酒僅第5,排在第1的,很多男性還沒發(fā)現(xiàn)!

加快男性衰老的因素:喝酒僅第5,排在第1的,很多男性還沒發(fā)現(xiàn)!

醫(yī)學(xué)科普匯
2026-01-27 10:41:31
中國人一年少買了10萬輛進口寶馬

中國人一年少買了10萬輛進口寶馬

第一財經(jīng)資訊
2026-01-29 10:34:13
1973年,毛主席問楊振寧:萬壽無疆科學(xué)嗎?楊振寧的回答,讓主席笑了

1973年,毛主席問楊振寧:萬壽無疆科學(xué)嗎?楊振寧的回答,讓主席笑了

寄史言志
2026-01-24 17:53:13
2026-01-29 17:15:00
Java精選
Java精選
一場永遠也演不完的戲
1768文章數(shù) 3859關(guān)注度
往期回顧 全部

科技要聞

周亞輝的AI新賭局:國內(nèi)太卷 出海另起爐灶

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

體育要聞

詹姆斯哭了!騎士視頻致敬41歲超巨

娛樂要聞

張譯不再隱瞞!公開回應(yīng)退圈息影真相

財經(jīng)要聞

崔東樹:中國汽車未來年銷或達5000萬輛

汽車要聞

車長超5米還帶后輪轉(zhuǎn)向 比亞迪海豹08/海獅08將亮相

態(tài)度原創(chuàng)

游戲
手機
教育
旅游
軍事航空

PS+港區(qū)2月會免來了! 包含《冰點之下》等

手機要聞

游戲直播神器!iQOO 15 Ultra支持一鍵投屏 開播0門檻

教育要聞

“國家課程落地吳江行動叢書”發(fā)布!聚焦課改前沿,共探育人新路!

旅游要聞

投資30億,一年收入500萬,玉龍雪山觀光火車關(guān)停的蛛絲馬跡

軍事要聞

中國代表:支持伊朗國家穩(wěn)定 武力解決不了問題

無障礙瀏覽 進入關(guān)懷版