2023-06-28 09:17:38來源:轉(zhuǎn)轉(zhuǎn)技術(shù)
系統(tǒng)文檔是當前對業(yè)務(wù)系統(tǒng)知識進行沉淀的主要手段。由于業(yè)務(wù)系統(tǒng)快速迭代或者人員的流動,文檔缺失、風格各異、沒有與迭代同步更新等問題十分常見,文檔質(zhì)量也是因人而異。
隨之而來的是研發(fā)效率、產(chǎn)研協(xié)作效率、質(zhì)量等一系列的問題,在團隊人員流動頻繁的情況下尤為突出。
圖片
(資料圖片僅供參考)
圖為研發(fā)流程示意圖,綠色箭頭部分是理想、高效的流程;但是由于不同角色間的信息差異,某一知識若不能從知識庫中獲取,就會存在紅色箭頭部分的逆向流程,需要各角色來回溝通確認;這樣的知識越多,逆向流程越多,研發(fā)流程越長,效率越低
1.2 業(yè)務(wù)系統(tǒng)背景去年,我們使用領(lǐng)域驅(qū)動設(shè)計(Domain-Driven Design,DDD)的思想對系統(tǒng)進行了重構(gòu)。在DDD中,以統(tǒng)一語言為基礎(chǔ),面向業(yè)務(wù)進行領(lǐng)域建模,將真實業(yè)務(wù)與軟件實現(xiàn)關(guān)聯(lián)起來,以領(lǐng)域模型為知識的載體實現(xiàn)沉淀。但是到最終的落地實現(xiàn),知識沉淀的手段還是落到文檔上。
我們希望找到一種通用的知識沉淀方法,自動從代碼中抽象、提煉業(yè)務(wù)知識,以及展現(xiàn)和沉淀知識,達到“代碼即文檔”的效果。
2 我們的思考圖片
原始代碼中蘊含了我們需要的知識,但非結(jié)構(gòu)化、無統(tǒng)一規(guī)律的代碼難以直接轉(zhuǎn)換為知識;需要一層中間的抽象來規(guī)范化結(jié)構(gòu)化原始代碼,從有既定規(guī)律的代碼中就可提煉出我們所需的知識
2.1 什么是業(yè)務(wù)系統(tǒng)知識商品的價格尾數(shù)必須是“8”是業(yè)務(wù)系統(tǒng)知識,商品上架后會發(fā)出MQ通知也是業(yè)務(wù)系統(tǒng)知識。根據(jù)側(cè)重的不同分2個方向:
純粹的業(yè)務(wù)知識,僅僅是業(yè)務(wù)規(guī)則的體現(xiàn),與技術(shù)實現(xiàn)無關(guān);系統(tǒng)知識,可能包含了業(yè)務(wù)的規(guī)則,更重要的是技術(shù)實現(xiàn)方案的體現(xiàn);比如為了保證數(shù)據(jù)的最終一致性,系統(tǒng)的實現(xiàn)往往比直接的業(yè)務(wù)規(guī)則要復雜。2.2 知識存在于哪里無論是業(yè)務(wù)規(guī)則還是技術(shù)實現(xiàn)無外乎什么條件下做什么事情,知識就在各種流程控制邏輯中。比如,各種業(yè)務(wù)規(guī)則判斷、根據(jù)不同條件頁面展示不同內(nèi)容、監(jiān)聽某個消息進行業(yè)務(wù)處理、通過策略模式進行邏輯分發(fā)等,都可以認為是流程控制的不同實現(xiàn),通俗理解就是對IF-ELSE邏輯的各種不同實現(xiàn)。
2.3 如何提煉出業(yè)務(wù)系統(tǒng)知識與DDD中面向業(yè)務(wù)進行建模不同,既然知識存在于流程控制邏輯中,那就對流程控制進行抽象、建模;脫離于具體的業(yè)務(wù)場景才能通用于每一種業(yè)務(wù)場景。
我們將流程控制的抽象定義為廣義的設(shè)計模式,是對IF-ELSE邏輯不同實現(xiàn)方式的抽象,包括常見的設(shè)計模式如責任鏈模式、策略模式、以及后文涉及的狀態(tài)機(FSM)、以及后續(xù)需要針對性的進行自定義抽象。業(yè)務(wù)系統(tǒng)知識就被承載其中,而且是結(jié)構(gòu)化的、方便被提取的。
3 探索性實踐業(yè)務(wù)系統(tǒng)中使用了一套拓展狀態(tài)機(FSM-X)的框架,符合上述對流程控制進行抽象、建模的想法,也是一種對IF-ELSE邏輯的實現(xiàn)方式。所以我們將FSM-X的可視化作為業(yè)務(wù)系統(tǒng)知識沉淀的初步探索。
3.1 FSM-XFSM-X核心還是有限狀態(tài)機(FSM)的實現(xiàn),然后在此基礎(chǔ)上擴展集成了事務(wù)消息、JOB等功能;相關(guān)的配置項統(tǒng)一存儲到數(shù)據(jù)庫中,方便配置和管理。主要有以下幾個核心概念:
Mapping:可以認為是FSM中的變換(Transition),包含了源狀態(tài)、目標狀態(tài)、事件、操作,表示在源狀態(tài)下發(fā)生某一事件,觸發(fā)對應(yīng)的操作,流轉(zhuǎn)到目標狀態(tài)。還包含了JOB、事務(wù)消息(TxMsg)、狀態(tài)機鏈(Chain)。Chain:狀態(tài)機鏈,用于鏈接2個Mapping,當前的Mapping的流轉(zhuǎn)完成后自動執(zhí)行鏈后的Mapping流轉(zhuǎn)。JOB:異步任務(wù),當Mapping中配置了JOB時,會自動執(zhí)行對應(yīng)的JOB。TxMsg:事務(wù)消息,如果Mapping中有對應(yīng)配置,完成Mapping流轉(zhuǎn)的同時自動發(fā)送消息。3.2 FSM-X可視化實現(xiàn)系統(tǒng)整體實現(xiàn)架構(gòu)如下圖
圖片
FSMX配置中心統(tǒng)一管理所有配置,對外提供拉取配置數(shù)據(jù)的能力。FSMX客戶端在業(yè)務(wù)服務(wù)啟動時拉取配置完成啟動,然后異步對狀態(tài)機數(shù)據(jù)進行轉(zhuǎn)換,得到可視化數(shù)據(jù)并進行上報。FSMX配置中心會在本地緩存可視化數(shù)據(jù),并對其進行加工對外呈現(xiàn)。與FSM-X中的幾種核心組件對應(yīng),可視化的視圖節(jié)點主要有以下幾種:
Mapping圖片
上圖為“SUPPLY_PRODUCT”域“質(zhì)檢合格”后“上架”事件節(jié)點,最后流轉(zhuǎn)到“預(yù)上架”狀態(tài),之后有21條可能的鏈繼續(xù)往后流轉(zhuǎn)。
Chain圖片
上圖紅框中為2條狀態(tài)機鏈,表示“SUPPLY_PRODUCT”域“上架”操作完成后可能執(zhí)行“PRODUCT_MART”域“預(yù)上架”操作,也可能執(zhí)行“SUPPLY_PRODUCT”域“上架取消(無可上架賣場)”操作。具體會怎么執(zhí)行,由鏈中的業(yè)務(wù)邏輯控制,目前這部分還沒有可視化,需要由其他自定義的廣義設(shè)計模式來進行抽象。
JOB圖片
MSG圖片
以我們系統(tǒng)中商品的上架流程為例,比較完整的可視化效果圖如下
圖片
從圖中可以看出上架流程的整體執(zhí)行過程,但還只是一個粗粒度的框架;因為單一從FSM-X中提煉出來的業(yè)務(wù)系統(tǒng)知識是有限的,更多的知識還存在于無法被抽象提煉的非結(jié)構(gòu)化代碼中。
4 總結(jié)我們把FSM-X這一套業(yè)務(wù)框架理解為對一類流程控制邏輯的抽象,是前文中提到的廣義設(shè)計模式的一種。于是進行了FSM-X的可視化實現(xiàn),作為用廣義設(shè)計模式去抽象和承載業(yè)務(wù)知識,完成提取和沉淀這種思路的探索實踐。
從目前的結(jié)果看,可視化的流程圖能夠表達狀態(tài)機流轉(zhuǎn)相關(guān)的業(yè)務(wù)知識,只是知識的完整性還遠遠不夠,畢竟目前只是從一種廣義設(shè)計模式提取了知識,大部分的業(yè)務(wù)知識是不被包含在內(nèi)的。但是通過這個效果,筆者認為這種思路是可以繼續(xù)探索的,對流程控制的各種實現(xiàn)都做好抽象之后,相當于形成了一套詳細的代碼規(guī)范,在既定規(guī)范內(nèi)的業(yè)務(wù)代碼就能實現(xiàn)業(yè)務(wù)知識的抽取、沉淀。敬請期待!!!
關(guān)于作者王輪,轉(zhuǎn)轉(zhuǎn)B2C技術(shù)部后端研發(fā)工程師
關(guān)鍵詞:
1背景介紹1 1要解決什么問題系統(tǒng)文檔是當前對業(yè)務(wù)系統(tǒng)知識進行沉淀的主
Python模塊是Python代碼的組織單位,可以包含變量、函數(shù)、類和其他Pyth
薪資專家BobbyMarks在今日的《NBAToday》節(jié)目中談到了湖人隊接下來的情
定增方案披露后僅一夜,杭州銀行(600926 SH)就將計劃的募資規(guī)模大幅
1、《我是歌手》第三集譚維維強勢踢館,本來挺高興的事情,但是她的經(jīng)
中新網(wǎng)6月28日電(中新財經(jīng)葛成)6月28日24時,國內(nèi)新一輪成品油調(diào)價窗口
一般說來,過期合同即合同期限屆滿,一般合同就終止了,但是在買賣合同
今天小紅來為大家?guī)淼氖敲厶覟觚埐枳龇?,蜜桃烏龍,讓我們一起往下?/p>
6月27日,國泰金鷹增長混合最新單位凈值為1 3685元,累計凈值為5 2933
紅單分別是:單據(jù)、清代納稅的單據(jù)。指UPS國際快遞在郵寄包裹時,填寫
6月27日,21世紀經(jīng)濟報道記者從建行獲悉,當日廣州海關(guān)、長沙海關(guān)及建
中新網(wǎng)成都6月27日電 (杜成)人民銀行成都分行27日下午召開的新聞發(fā)
被包夾所困!楊瀚森7中5砍14分9板5帽但出現(xiàn)8次失誤,內(nèi)線,楊瀚森,職業(yè)生涯
【受權(quán)發(fā)布】6月27日北京市解除高溫黃色預(yù)警信號
關(guān)于今年為什么桂魚那么貴的內(nèi)容,包含為什么鱖魚那么貴?為什么松子桂