0.代碼位址
https://github.com/zjn-zjn/ice
1.節點結構
前面的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.基礎流程
上圖為一個以往版本的解釋,現已大部分優化,但原理一緻
1.業務通過IcePack資料包進入ice執行,需指定要執行的iceId/scene(場景)
2.IcePack組裝成IceContext在ice中流轉
3.依托觀察者模式,将資料庫/其他地方配置的完整的ice樹形結構,經過組裝形成對應執行的handler,在特定scene/iceId下觸發并執行handle方法
3.Client設計
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]