成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

spring statemachine的企業(yè)可用級(jí)開發(fā)指南1-說些廢話

BakerJ / 2287人閱讀

摘要:讓我們先看下狀態(tài)機(jī)的概念。下面是狀態(tài)機(jī)模型中的個(gè)要素,即現(xiàn)態(tài)條件動(dòng)作次態(tài)。因?yàn)橛唵魏蛯徟亩加泻芏嗟牧鞒?,每個(gè)流程都會(huì)產(chǎn)生狀態(tài)的變化,而且流程是這種業(yè)務(wù)的主軸,其他都是圍繞這個(gè)流程和狀態(tài)變化來考慮的,所以看起來蠻適合用狀態(tài)機(jī)來做。

1、背景
在我打算學(xué)習(xí)spring statemachine的時(shí)候,我?guī)缀蹩催^了所有網(wǎng)上的中文教程,基本上都處于淺嘗輒止的階段,有幾篇講的比較深入的,都只是堆代碼,具體用在什么地方,都語焉不詳,我打算把我一路摸索的過程記錄下來,方便大家能繼續(xù)前行。

2、spring statemachine是干啥用的
spirng statemachine是干啥用的,這個(gè)其實(shí)是個(gè)問題來的,但很多的教程的問題也在這,一上來就是告訴你有這么個(gè)玩意,然后就是開始怎么安裝,怎么運(yùn)行,功能有哪些,特性列起來,但就不告訴你這個(gè)東西能干啥,所以我打算在把spring statemachine跑起來之前,先說下spring statemachin能干啥。讓我們先看下狀態(tài)機(jī)的概念。

有限狀態(tài)機(jī)(英語:finite-state machine,縮寫:FSM),簡稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。應(yīng)用FSM模型可以幫助對(duì)象生命周期的狀態(tài)的順序以及導(dǎo)致狀態(tài)變化的事件進(jìn)行管理。將狀態(tài)和事件控制從不同的業(yè)務(wù)Service方法的if else中抽離出來。FSM的應(yīng)用范圍很廣,對(duì)于有復(fù)雜狀態(tài)流,擴(kuò)展性要求比較高的場景都可以使用該模型。下面是狀態(tài)機(jī)模型中的4個(gè)要素,即現(xiàn)態(tài)、條件、動(dòng)作、次態(tài)。

現(xiàn)態(tài):是指當(dāng)前所處的狀態(tài)。
條件:又稱為“事件”。當(dāng)一個(gè)條件被滿足,將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。
動(dòng)作:條件滿足后執(zhí)行的動(dòng)作。動(dòng)作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動(dòng)作不是必需的,當(dāng)條件滿足后,也可以不執(zhí)行任何動(dòng)作,直接遷移到新狀態(tài)。
次態(tài):條件滿足后要遷往的新狀態(tài)?!按螒B(tài)”是相對(duì)于“現(xiàn)態(tài)”而言的,“次態(tài)”一旦被激活,就轉(zhuǎn)變成新的“現(xiàn)態(tài)”了。

這是狀態(tài)機(jī)的定義,這個(gè)我不打算多說,因?yàn)楦拍钚缘臇|西,諸位請(qǐng)自行搜索,那么在實(shí)際應(yīng)用中,狀態(tài)機(jī)會(huì)應(yīng)用在什么地方呢?不知道大家怎么想,我在接觸到狀態(tài)機(jī)的時(shí)候,第一時(shí)間想到的就是訂單和審批公文,這是我在工作中實(shí)際遇到的場景,所以我學(xué)習(xí)spring statemachine的主要?jiǎng)恿σ彩菫榱四芴幚磉@兩種情況。因?yàn)橛唵魏蛯徟亩加泻芏嗟牧鞒?,每個(gè)流程都會(huì)產(chǎn)生狀態(tài)的變化,而且流程是這種業(yè)務(wù)的主軸,其他都是圍繞這個(gè)流程和狀態(tài)變化來考慮的,所以看起來蠻適合用狀態(tài)機(jī)來做。

那是不是一定要用狀態(tài)機(jī)來做呢,這可不一定,因?yàn)樵跊]有狀態(tài)機(jī)之前的訂單流程大家也能實(shí)現(xiàn),這世界缺了誰都正常運(yùn)轉(zhuǎn),所以狀態(tài)機(jī)不是必須的,在可以用狀態(tài)機(jī)解決這種流程和狀態(tài)變化的場景下,為什么要用,這是另外一個(gè)問題,因?yàn)榭梢杂煤蜎Q定用之間,還有個(gè)問題,那就是用這個(gè)有啥好處呢?

3、spring statemachine的好處
在做軟件項(xiàng)目的時(shí)候,我們會(huì)以各種各樣的角度看一個(gè)項(xiàng)目,比如OOP,萬物皆對(duì)象,一個(gè)訂單就是一個(gè)對(duì)象,所謂的狀態(tài)變化,無非就是訂單這個(gè)對(duì)象的變量在不停的變化,變化的過程就是對(duì)象的方法;再比如數(shù)據(jù)庫,萬物無非CRUD的組合,訂單不過就是增刪改查,數(shù)據(jù)庫原子操作的組合罷了。這些角度對(duì)嗎?可以說都對(duì),因?yàn)橛眠@些角度都有人做出了項(xiàng)目,但有些角度對(duì)項(xiàng)目的理解會(huì)比較方便,有些角度就比較費(fèi)勁,比如訂單,如果是訂單的生成查看,用CRUD就是很適合,因?yàn)檫@個(gè)角度很契合;如果是訂單和商品的關(guān)系,訂單和其他業(yè)務(wù)的關(guān)聯(lián),OOP的角度就很適合,因?yàn)橛梅庋b、多態(tài)的視角比較容易看清楚這類業(yè)務(wù)和他們之間的邊界,方便劃分各自的功能。而狀態(tài)機(jī)的角度,就是以狀態(tài)變化和流程運(yùn)轉(zhuǎn)為角度切入看問題,所以對(duì)于流程性為主軸的項(xiàng)目就很適合,所以是不是用spring statemachine,衡量的標(biāo)準(zhǔn)就是,這個(gè)項(xiàng)目的主軸,或者場景是不是一個(gè)流程性、狀態(tài)變化為主的項(xiàng)目,如果是,就可以考慮用spring statemachine了。

這個(gè)問題其實(shí)還沒回答完,上面說的其實(shí)是在什么情況下用spring statemachine,但還沒回答好處在哪里。要回答這個(gè)問題,要從軟件項(xiàng)目的一些特質(zhì)說起。上面說了,軟件項(xiàng)目其實(shí)有很多的辦法完成,手段很多,完成的情況也各有優(yōu)劣,那怎么判斷用什么辦法好呢,我覺得答案就是看項(xiàng)目主要解決的問題是什么。軟件項(xiàng)目既不是程序員練手的工具,也不是老板用來蒙錢的門面,它是用來解決問題的,所以能清晰的表達(dá)問題,解決問題的手段就是好的技術(shù)手段,所以,如果一種技術(shù)手段很清晰的表達(dá)了軟件項(xiàng)目的問題和解決方法,那么這就是這個(gè)技術(shù)最大的好處,而狀態(tài)機(jī)對(duì)于流程性、狀態(tài)變化的場景,它就是一個(gè)清晰的表達(dá)方式,這就是它的好處。

這樣說可能有些朋友會(huì)不以為然,一個(gè)技術(shù)框架的好處難道不是功能強(qiáng)大,使用方便,性能卓越這些東西嗎。我的理解是上面說的這幾點(diǎn)都很重要,但都是次一級(jí)的問題,能清晰的表達(dá)問題和解決問題的,才是核心的好處。在《人月神話》的《沒有銀彈》這篇文章里面就提到過軟件特性的根本困難和次要困難,而對(duì)問題的表達(dá)和解決其實(shí)就是對(duì)需求的準(zhǔn)確描述和實(shí)現(xiàn),這就是軟件開發(fā)的根本困難,所以能夠清晰表達(dá)這個(gè)的技術(shù)框架,就是解決根本困難的好工具,項(xiàng)目技術(shù)選型最重要的好處考量。至于功能、性能這些,都是次要問題,雖然spirng statemachine在次要問題上也并沒有什么缺陷。

好了,廢話時(shí)間結(jié)束,下一章,我們正式開始第一個(gè)例子,運(yùn)行一個(gè)demo,請(qǐng)大家期待,因?yàn)檫@個(gè)例子真的沒啥用:)

源代碼地址

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74948.html

相關(guān)文章

  • spring statemachine企業(yè)可用級(jí)開發(fā)指南7-偽持久化和中間段狀態(tài)機(jī)

    摘要:在實(shí)際的企業(yè)開發(fā)中,不可能所有情況都是從頭到尾的按狀態(tài)流程來,會(huì)有很多意外,比如歷史數(shù)據(jù),故障重啟后的遺留流程,所以這種可以任意調(diào)節(jié)狀態(tài)的才是我們需要的狀態(tài)機(jī)。 1、偽持久化和中間段的狀態(tài)機(jī)我們?cè)O(shè)想一個(gè)業(yè)務(wù)場景,就比如訂單吧,我們一般的設(shè)計(jì)都會(huì)把訂單狀態(tài)存到訂單表里面,其他的業(yè)務(wù)信息也都有表保存,而狀態(tài)機(jī)的主要作用其實(shí)是規(guī)范整個(gè)訂單業(yè)務(wù)流程的狀態(tài)和事件,所以狀態(tài)機(jī)要不要保存真的不重要,...

    shiyang6017 評(píng)論0 收藏0
  • spring statemachine企業(yè)可用級(jí)開發(fā)指南2-先跑起來

    摘要:先來一個(gè),它的主要作用就告訴狀態(tài)機(jī)的初始狀態(tài)應(yīng)該啥樣,然后把整個(gè)狀態(tài)流程都用代碼配置出來。繼承了類,表明身份,我就是來配置狀態(tài)機(jī)的初始狀態(tài),并描繪一下狀態(tài)流程的全過程。 上一篇說了很多廢話,這一篇就不嘮叨,先跑起來 1、來個(gè)spring boot去start.spring.io新建一個(gè)springboot的項(xiàng)目,雖然我對(duì)spirngboot也有不少的牢騷,但作為demo的開始,還是一個(gè)...

    lvzishen 評(píng)論0 收藏0
  • spring statemachine企業(yè)可用級(jí)開發(fā)指南6-持久化

    摘要:目前為止,我們都是從狀態(tài)流程的開始階段創(chuàng)建一個(gè)狀態(tài)機(jī),然后一路走下去。然后就可以愉快的在里面看怎么用了發(fā)送事件持久化恢復(fù)狀態(tài)機(jī)后的狀態(tài)為執(zhí)行完保存后,大家可以自己在客戶端查看以下,是不是有內(nèi)容保存進(jìn)去了。 目前為止,我們都是從狀態(tài)流程的開始階段創(chuàng)建一個(gè)狀態(tài)機(jī),然后一路走下去。但在實(shí)際業(yè)務(wù)中,狀態(tài)機(jī)可能需要在某個(gè)環(huán)節(jié)停留,等待其他業(yè)務(wù)的觸發(fā),然后再繼續(xù)下面的流程。比如訂單,可能在支付環(huán)節(jié)...

    Jioby 評(píng)論0 收藏0
  • spring statemachine企業(yè)可用級(jí)開發(fā)指南5-傳遞參數(shù)message

    摘要:創(chuàng)建了后,狀態(tài)機(jī)就可以不只是傳一個(gè),可以組合和數(shù)據(jù)內(nèi)容一起發(fā)送給狀態(tài)機(jī)變化的處理類了。到這里為止,狀態(tài)機(jī)通過對(duì)象就和其他的業(yè)務(wù)代碼做到了數(shù)據(jù)連接。 在企業(yè)開發(fā)中,數(shù)據(jù)在不同的業(yè)務(wù)間傳輸是最常見的工作,所以雖然我們的主架構(gòu)是用的狀態(tài)機(jī),也就是從流程狀態(tài)的角度來看待這個(gè)項(xiàng)目,但在具體業(yè)務(wù)中,每個(gè)狀態(tài)的轉(zhuǎn)變中會(huì)牽涉到各類業(yè)務(wù),這些業(yè)務(wù)有些需要收到狀態(tài)機(jī)變化的通知,需要把狀態(tài)值傳遞給業(yè)務(wù)類和業(yè)...

    YacaToy 評(píng)論0 收藏0
  • spring statemachine企業(yè)可用級(jí)開發(fā)指南8-復(fù)雜狀態(tài)機(jī)實(shí)現(xiàn)

    摘要:講講復(fù)雜流程的需求除了上面文章里面提到的一根筋狀態(tài)機(jī)流程,實(shí)際的企業(yè)應(yīng)用中狀態(tài)機(jī)的流程會(huì)更加復(fù)雜,而我們最常用到的就是。當(dāng)然,里面還有很多其他的東西,大部分是處理復(fù)雜狀態(tài)機(jī)流程的,以后有機(jī)會(huì)我們?cè)僬归_講。 1、講講復(fù)雜流程的需求除了上面文章里面提到的一根筋狀態(tài)機(jī)流程,實(shí)際的企業(yè)應(yīng)用中狀態(tài)機(jī)的流程會(huì)更加復(fù)雜,而我們最常用到的就是choice。它類似于java的if語句,作為條件判斷的分支...

    jzzlee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

BakerJ

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<