天天看點

狀态機(FSM)、狀态模式在金融支付系統中的應用(一)前言

文章目錄

  • 前言
    • 1.什麼是狀态模式有什麼優劣勢?
    • 2.什麼是狀态機?
    • 3.開發工作中如何使用狀态模式和狀态機?

前言

想必大家對23中設計模式中的狀态模式應該或多或少都有一定了解,但是在具體工作中可能由于沒有複雜的場景或者沒有對狀态模式有深刻的了解不知道怎麼應用,今天會以金融支付系統實際應用場景為例示範狀态模式和狀态機的應用

1.什麼是狀态模式有什麼優劣勢?

還不知道狀态模式的可以看一下 大話設計模式 - 狀态模式 ,官方解釋一句話概括:“允許一個對象在其内部狀态改變時改變它的行為。對象看起來似乎修改了它的類,(State Pattern)是設計模式的一種,屬于行為模式。”第一次聽說可能不是很好了解,但是我們可以認為實際場景中涉及到狀态的變更場景如最典型電商發貨會有:已發貨、已收獲,之類的狀态,而我個人了解狀态模式在實際工作中最大的優勢就是:

狀态機(FSM)、狀态模式在金融支付系統中的應用(一)前言

*減少各種狀态重複的if else判斷導緻的代碼出錯以及整潔度

*各個狀态本身可以處理自己的狀态以及下一狀态的流轉實作單一職責

但是軟體設計沒有完美一說,狀态模式的劣勢和設計不足也很容易展現:

*各種狀态由于是獨立一個類會導緻類的暴增

*增加新的狀态的時候不可避免的會違反開閉原則(Context類、狀态銜接類)

以上的優劣勢需要在實際場景中進行取舍

2.什麼是狀态機?

還是引用别人對狀态機的簡單介紹(就是懶~) 什麼是狀态機?,我們直覺的來看一個金融第三方支付系統的狀态機

狀态機(FSM)、狀态模式在金融支付系統中的應用(一)前言

第一眼我們可以發現狀态機其實就是狀态之間轉換的一個模型,模型之上還會加上一些“事件”、“動作” 形成一個直覺的系統,之是以叫“機”我個人了解是因為它有動作形成了一套能流轉的生态很像一個機器,是以狀态機我們可以簡單的了解為表達狀态變更的一個直覺模型。

3.開發工作中如何使用狀态模式和狀态機?

上一篇文章如何保證異步重複消息狀态更新正确性中具體示範了如何在代碼層級保證重複異步消息下狀态變更的正确性,其實也是目前支付電商領域中常見的做法,如果狀态比較少,簡單的通過判斷就可以實作狀态變更的控制,根本不需要引入狀态機,但是真實的業務場景中往往狀态變更非常的複雜,例如上面的銀行管道退款的狀态機,如何利用狀态模式和狀态機抽象業務中的狀态流轉和清晰的表達狀态的變更顯得尤為的重要,由于篇幅的原因,下一章我将着重用代碼的方式呈現一個狀态機和狀态模式結合的實際例子,下一篇見~