新手打怵老手頭疼的業務;
通常在業務體系中,都會或多或少的涉及到支付相關的功能;對於一些經驗欠缺同學來說,最緊張的就是面對這類支付結算的邏輯,因為流程中的任何細節問題,都可能引發對賬異常的情況;
錯誤發生之後,再想去修復流程,花費的時間成本又是高昂的,還牽扯錯誤資料的調平問題,最終很可能引發亂賬算不清的結果,然後需要人工介入手動處理;
在支付場景中,不但涉及諸多的複雜業務,結算規則,超長的流程,第三方對接,其中更是涉及到諸多技術細節,比如:事務管理、非同步處理、重試機制、加鎖等;下面來分析具體的細節邏輯。
面對複雜業務的時候,最基本的能力就是要懂得把流程拆成模組,做好各個模組管理,再考慮如何銜接起整個流程,從而形成解決問題的思路和經驗;
如圖是對交易場景常見的分解,大致可以分為四個模組:
這裡只是從一個常規的交易流程中去分析,實際的細節描述會遠比圖例複雜,雖然業務細節各不相同,但是處理思路是大體相通的;再根據各個模組設計流程時序圖,規劃好節點之間的銜接和共同作業;
通過時序圖的設計,來分析各個節點在銜接共同作業時應該如何處理,在支付業務中,通常分為支付前、支付對接、支付後三個核心階段:
實際上對業務有清晰的理解和拆分之後,再做好時序流程的設計,這樣就已經讓一個複雜的場景看起來簡單許多了,之後就是設計各個節點的資料結構;
基於上面的業務場景分析和拆解,以及流程時序圖的呈現,可以很容易輸出一份基礎維度的結構設計,下圖可以作為參考:
即使單看上面的簡單設計,都能感覺到支付業務的複雜性,更何況還會疊加紅包或滿減等優惠規則之後,其複雜程度可想而知;
當然如果有明確的開發規範,在複雜版本中,所有開發必須輸出業務的分解拆分思路,時序和結構設計,在統一評審之後再落地編碼,這樣即便是複雜的業務也會有極大的質量保證。
上面單從支付的主邏輯去分析流程,實際上涉及到的業務遠不止流程中提到的這些,以常見的電商場景為例,交易中還存在商品管理、庫存管理、物流管理,支付對接還會涉及優惠規則嵌入等等;
商品管理
優惠券規則
這裡簡述的商品和優惠券業務,都是與支付流程有緊密的聯絡,比如拆單後庫存不足,需要移除該商品;優惠券在支付中的使用策略,以及退款時的處理方式等;
最後從技術實現的角度,總結一下支付流程中的一些關鍵問題:
很多複雜的業務場景管理,都需要一個長期的迭代過程,但是前提需要牢牢把握住核心的邏輯;對業務的認知是一個由繁入簡的過程,而業務的實現是一個由淺到深的過程,即分析與理解,到落地實現,再到探索與創新。
程式設計檔案:
https://gitee.com/cicadasmile/butte-java-note
應用倉庫:
https://gitee.com/cicadasmile/butte-flyer-parent