微信支付的系統(tǒng)架構(gòu)到底有多厲害?

源?/cnblog?? ?文?/?jack jiang


背 景
容易出 Bug
通過溝通保證不了質(zhì)量
需求變更迭代周期長
數(shù)據(jù)上報(bào)不全面
缺少業(yè)務(wù)及設(shè)計(jì)知識沉淀
協(xié)議管理松散
缺少統(tǒng)一的自動(dòng)化測試

C++ 的跨平臺框架,并對核心支付流程進(jìn)行了重構(gòu)。
線上效果指標(biāo)

跨平臺實(shí)現(xiàn):iOS + 安卓 共計(jì) 3 人日,在封板時(shí)間前完成
原生實(shí)現(xiàn):iOS, 安卓封板時(shí)間后一周才基本完成
跨平臺實(shí)現(xiàn):iOS + 安卓共計(jì) 5 人日,在封板時(shí)間前完成
原生實(shí)現(xiàn):iOS, 安卓封板時(shí)間后一周才基本完成


微信支付的軟件架構(gòu)
MVC,MVVM 等。
從零到一構(gòu)建支付跨平臺軟件架構(gòu)
C++ 來編寫業(yè)務(wù)代碼,并沒有成熟的架構(gòu)。即使使用 C++ 編寫業(yè)務(wù)邏輯,但都不涉及 UI,不涉及界面的跳轉(zhuǎn)流程。現(xiàn)在業(yè)界通用的有 MVC , MVP, MVVM 。這些大家都熟悉的軟件架構(gòu)。但是這些軟件架構(gòu)都存在一個(gè)問題:那就是沒有處理好業(yè)務(wù)流程, 界面轉(zhuǎn)場。
MVC 這種架構(gòu)的話,很快代碼會變得難以維護(hù)。
UseCase。同時(shí), 把界面抽象為 UIPage。一個(gè)大的業(yè)務(wù)流程可以分解為一個(gè)個(gè)小的業(yè)務(wù)流程。
業(yè)務(wù)流程的代碼能夠聚合到 UseCase 中,而不是分散到原來 iOS, 安卓的各個(gè) ViewController,Activity 中。
業(yè)務(wù)流程和界面得到了復(fù)用。
契合微信支付多流程,界面跳轉(zhuǎn)復(fù)雜的業(yè)務(wù)特點(diǎn)。
2、加入路由機(jī)制
流程之間,頁面之間的流傳。

本文中的名詞 CGI可以理解為一個(gè)網(wǎng)絡(luò)請求,類似HTTP請求。
特殊流程的處理



那么怎么建立這個(gè)支付領(lǐng)域模型的呢?



統(tǒng)一了流程,頁面的流轉(zhuǎn)。清晰,易維護(hù)。
統(tǒng)一了特殊流程的處理,減少重復(fù)工作。
在加入路由機(jī)制的時(shí)候,結(jié)合微信支付和網(wǎng)絡(luò)密切相關(guān)的特點(diǎn)進(jìn)行了支付領(lǐng)域建模。支付后臺協(xié)議重構(gòu) 2.0 的核心思想也是圍繞著這個(gè)路由機(jī)制展開。

3、管理網(wǎng)絡(luò)請求

CGI 一對多通訊問題。

進(jìn)入錢包頁面后,發(fā)起了一個(gè) Cgi
然后進(jìn)入收付款頁面也發(fā)起同一個(gè) Cgi.
如果收付款發(fā)起的回包先到
然后錢包首頁的回包再到。
CGI 生命周期問題。

將 Cgi 抽象為獨(dú)立對象

劃分職責(zé),明確生命周期

杜絕了一對多通信造成的 Bug
生命周期和業(yè)務(wù)邏輯綁定,不會出現(xiàn)業(yè)務(wù)結(jié)束,Cgi 回來后再觸發(fā)動(dòng)作。
高內(nèi)聚,低耦合。將 Cgi 相關(guān)的數(shù)據(jù),能力集中處理,業(yè)務(wù)側(cè)無需感知。
提供統(tǒng)一的緩存,加密能力。



4、?規(guī)范數(shù)據(jù)傳遞

進(jìn)入支付首頁時(shí),后臺返回了數(shù)據(jù),然后被寫入到一個(gè)公共的 Model.
然后進(jìn)入錢包頁,再進(jìn)入零錢頁。這個(gè)公共 model 一路被傳遞過去。
然后零錢頁讀取了公共 Model 的數(shù)據(jù),但是代碼無法處理,導(dǎo)致出現(xiàn)了這個(gè)讓用戶恐慌的問題。

存在公共讀寫的數(shù)據(jù)類型。
無序的數(shù)據(jù)流動(dòng)。

去掉公共讀寫的數(shù)據(jù)類型
傳遞值類型(Value Type)的數(shù)據(jù), 后面流程修改數(shù)據(jù)時(shí),不影響前面的流程。
單向傳遞數(shù)據(jù),只依賴注入必要數(shù)據(jù)。
如果數(shù)據(jù)修改需要通知前序流程,使用代理模式通訊。
從架構(gòu)上根本解決了困擾微信支付已久的數(shù)據(jù)污染的問題。
數(shù)據(jù)的流動(dòng)變?yōu)閱蜗颍瑪?shù)據(jù)流動(dòng)變得可追溯。


總結(jié)
—?完?—
一鍵三連「分享」、「點(diǎn)贊」和「在看」
技術(shù)干貨與你天天見~
