日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
聊聊一個用Go實現的有限狀態(tài)機

easyfsm

為什么不使用looplab/fsm,star挺多的啊。

成都創(chuàng)新互聯專業(yè)為企業(yè)提供漳浦網站建設、漳浦做網站、漳浦網站設計、漳浦網站制作等企業(yè)網站建設、網頁設計與制作、漳浦企業(yè)網站模板建站服務,10多年漳浦做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。

不是特別喜歡,每次實例化fsm都需要重新傳遞對應events(雖然我們可以統(tǒng)一封裝),我更期望在項目啟動時把此項目涉及到不同業(yè)務狀態(tài)機流轉注冊到fsm,對應:不同業(yè)務->[狀態(tài)]->[事件]->處理事件主體(包含handler、params、hooks、observers等)。

這就是easyfsm的由來。

當你開始進行狀態(tài)流轉時,只需要:

為什么需要區(qū)分業(yè)務?

因為絕大多數業(yè)務的狀態(tài)值都是從數據庫中獲取的,比如訂單表的訂單狀態(tài),商品表中的商品狀態(tài),有可能值是相同的。

同一個業(yè)務同一屬性對應狀態(tài)值表達單一,不同業(yè)務下屬性狀態(tài)可能會出現值相同,但所表達的含義是不同的。

整體設計:

簡單解釋一下:

  • 業(yè)務:比如有商品狀態(tài)業(yè)務、訂單狀態(tài)業(yè)務.....
  • 狀態(tài):訂單待付款、待發(fā)貨....
  • 事件:對應狀態(tài)僅可達事件集合。比如待付款狀態(tài)的可達事件僅有:支付事件和取消事件(取決于自己的業(yè)務)。
  • 執(zhí)行事件主體:執(zhí)行自定義的事件函數,如果有需要,還可以自定義執(zhí)行事件前后hook,事件訂閱者(比如支付事件發(fā)生后,異步通知用戶等)。

使用姿勢

首先自定義業(yè)務、狀態(tài)、事件。

自定義事件主體:

注冊到easyfsm:

開始使用:

完整示例代碼如下:

Hook

如果想在處理事件函數的前后執(zhí)行一些hook,或者在事件執(zhí)行完畢,異步執(zhí)行一些其他業(yè)務,easyfsm定義了這兩個接口。

我們可以實現這兩個接口:

完整代碼:

總結

上面簡單介紹了下easyfsm設計以及對應使用姿勢。

https://github.com/wuqinqiang/easyfsm


分享題目:聊聊一個用Go實現的有限狀態(tài)機
本文來源:http://www.5511xx.com/article/cdgdoos.html