天天看點

流程/規則架構-ice設計

0.代碼位址

https://github.com/zjn-zjn/ice

1.節點結構

前面的ice介紹中提到用節點将業務拆解,并使用關系節點将業務連接配接起來并控制業務流轉。

流程/規則架構-ice設計

結構解釋:

1.BaseNode 所有節點的基類,存放着節點的共性

2.BaseRelation 所有關系節點的基類,children是關系節點下的所有子節點,具體的有介紹中所說的AndRelation,AnyRelation,AllRelation ,NoneRelation ,TrueRelation

3.BaseLeafFlow 葉子節點,所有過濾性條件的基類,供具體業務繼承并實作其doFlow方法,傳回true和false代表是否滿足/是否通過

4.BaseLeafResult 葉子節點,所有結果性質的類的基類,供具體業務繼承并實作其doResult方法,傳回true和false代表結果是否被發放,如發放獎勵等

5.BaseLeafNone 葉子節點,所有僅資料組裝/資料加載等不幹預流程的類的基類,供具體業務繼承并實作其doNone方法,無傳回值,資料的組裝和加載後放入上下文中,供後續流程使用

2.基礎流程

流程/規則架構-ice設計

上圖為一個以往版本的解釋,現已大部分優化,但原理一緻

1.業務通過IcePack資料包進入ice執行,需指定要執行的iceId/scene(場景)

2.IcePack組裝成IceContext在ice中流轉

3.依托觀察者模式,将資料庫/其他地方配置的完整的ice樹形結構,經過組裝形成對應執行的handler,在特定scene/iceId下觸發并執行handle方法

3.Client設計

流程/規則架構-ice設計

1.各自app在項目啟動時通過Mq拉取最新配置,并組裝到本地緩存

2.當server發現某app下有更新,便推送更新到具體業務并更新ice緩存

3.server端實作可視化配置,操作樹與更新樹形結構配置等

4.待實作

1.監控與報警與落盤

當某個葉子節點報錯後,可根據配置選擇是否落盤異常,并記錄當時ice快照與執行到的節點資訊,當錯誤修複/恢複後,可選擇重新執行/從錯誤節點恢複

2.同scene多handler處理優先級

當同scene多handler情況發生時根據各個handler的優先級指定執行順序,確定高優先級請求優先處理

3.節點根據複雜度調整與并發執行

調整:如A過濾比B過濾耗時多,且是A&&B的情況,則應調整為B&&A

并發:如A&&B&&C 是不是ABC并發執行,當有一個傳回false時結束執行并傳回false會不會對一些特殊場景有性能提升?

4.持續性優化,等等等等,還有很多業務場景待發掘

有更好方案/簡易的小夥伴歡迎交流~~

e:[email protected]

ice