研發(fā)過程代碼與平臺(tái)模型的雙向聯(lián)動(dòng)
為了解決系統(tǒng)實(shí)現(xiàn)與設(shè)計(jì)在持續(xù)迭代過程中的一致性等問題,BizWorks提供了一種代碼與平臺(tái)模型的雙向聯(lián)動(dòng)機(jī)制。本文介紹BizWorks雙向聯(lián)動(dòng)機(jī)制,以及如何使用BizWorks提供的相關(guān)能力,將代碼與平臺(tái)模型的雙向聯(lián)動(dòng)順暢融入到已有的研發(fā)流程中。
背景信息
由于產(chǎn)品的迭代交付周期、人員的組成、成員能力和職責(zé)分配等因素,研發(fā)團(tuán)隊(duì)的協(xié)作模式存在不同的風(fēng)格,也會(huì)在團(tuán)隊(duì)成長過程中形成一些特有的團(tuán)隊(duì)默契和設(shè)計(jì)。BizWorks雙向聯(lián)動(dòng)相關(guān)的功能點(diǎn)在模型設(shè)計(jì)、應(yīng)用研發(fā)階段都有涉及,您可以按需靈活搭配使用,能夠適應(yīng)不同團(tuán)隊(duì)的風(fēng)格。而對(duì)于我們某一特定的團(tuán)隊(duì)或項(xiàng)目,通常希望能快速簡單上手,形成一種行之有效的研發(fā)流程。
BizWorks雙向聯(lián)動(dòng)機(jī)制概述
模型是對(duì)領(lǐng)域知識(shí)嚴(yán)格的組織,且有選擇的抽象,是濃縮的知識(shí)。當(dāng)然,只有其與實(shí)現(xiàn)之間具有緊密聯(lián)系,才是有用的模型,否則就與代碼的注釋一樣,“糟糕的注釋,不如沒有注釋”。雙向聯(lián)動(dòng)機(jī)制的直接能力就是保持迭代過程中模型和代碼的緊密聯(lián)系。
平臺(tái)模型:BizWorks平臺(tái)可以幫助我們?cè)O(shè)計(jì)、審查、分發(fā)、沉淀、演進(jìn)企業(yè)數(shù)智化轉(zhuǎn)型中的各類重要模型,模型自然是平臺(tái)的核心之一。我們將沉淀到平臺(tái)中的模型稱為平臺(tái)模型。
代碼反映模型:遵照BWAF規(guī)范、通過平臺(tái)生成的代碼或通過人工識(shí)別標(biāo)注關(guān)聯(lián)的代碼,代碼實(shí)現(xiàn)也可以反映出其對(duì)應(yīng)的模型。我們將代碼中反映出來的模型稱為代碼反映模型,在IDEA插件中相對(duì)于平臺(tái)模型,也簡稱代碼反映模型為本地模型(研發(fā)人員本地代碼反映出的模型)。
平臺(tái)模型和代碼的雙向聯(lián)動(dòng)主要邏輯行為有代碼生成、代碼掃描、模型上報(bào)。在平臺(tái)和IDE插件中分別有不同的操作與之對(duì)應(yīng)。
雙向聯(lián)動(dòng)研發(fā)流程
不區(qū)分角色權(quán)限的簡單雙向聯(lián)動(dòng)研發(fā)流程
簡單流程考慮研發(fā)人員同時(shí)擁有模型和代碼的操作權(quán)限,研發(fā)人員對(duì)自己實(shí)現(xiàn)業(yè)務(wù)所對(duì)應(yīng)的代碼與模型同時(shí)負(fù)責(zé)。在這種場(chǎng)景下,不嚴(yán)格區(qū)分模型設(shè)計(jì)角色或代碼編寫角色。簡單雙向聯(lián)動(dòng)研發(fā)流程如下圖所示。
研發(fā)人員可以在流程中隨時(shí)修改自己負(fù)責(zé)的代碼和平臺(tái)模型,通過BizWorks使其雙向一致。您也可以選擇發(fā)起代碼評(píng)審,讓更多的研發(fā)人員一起評(píng)審代碼和模型設(shè)計(jì)。
上圖中雙向聯(lián)動(dòng)研發(fā)流程的詳情如下:
模型設(shè)計(jì):假設(shè)初始的模型設(shè)計(jì)在建模平臺(tái)完成。具體操作,請(qǐng)參見創(chuàng)建與管理業(yè)務(wù)域、使用領(lǐng)域模型設(shè)計(jì)器等相關(guān)文檔。
應(yīng)用創(chuàng)建,并綁定關(guān)聯(lián)關(guān)系:BizWorks平臺(tái)DevOps核心之一是應(yīng)用,所以需要先創(chuàng)建應(yīng)用。同時(shí)關(guān)聯(lián)業(yè)務(wù)領(lǐng)域和商業(yè)能力。具體操作,請(qǐng)參見創(chuàng)建和管理中心應(yīng)用。
腳手架生成:應(yīng)用創(chuàng)建后,我們會(huì)以應(yīng)用為維度組織代碼。您可以選擇關(guān)聯(lián)已有倉庫或創(chuàng)建新的倉庫,然后通過平臺(tái)的腳手架生成功能生成初始的代碼腳手架。具體操作,請(qǐng)參見生成代碼。
DDL腳本導(dǎo)出創(chuàng)建庫表:除了代碼腳手架的生成之外,我們也會(huì)借助DDL腳本導(dǎo)出快速創(chuàng)建好對(duì)應(yīng)的庫表。
拉出迭代開發(fā)分支:進(jìn)入正常的迭代開發(fā)節(jié)奏,假設(shè)每個(gè)迭代會(huì)有特定的開發(fā)分支(或特定的Feature分支或其他分支,取決于我們的分支模型)。
Pull開發(fā)分支代碼:以研發(fā)人員的視角,在本地Checkout出開發(fā)分支代碼。
在本地開發(fā):研發(fā)人員正常開發(fā)。
模型變更:在平臺(tái)對(duì)模型進(jìn)行變更,如添加字段、修改方法簽名或新增模型等。
通過IDE插件同步模型信息到本地,進(jìn)行實(shí)時(shí)一致性校驗(yàn):IDE插件可以在同步平臺(tái)模型信息后對(duì)代碼反映模型進(jìn)行對(duì)比校驗(yàn)。更多信息,請(qǐng)參見查看和調(diào)整BizWorks相關(guān)校驗(yàn)規(guī)則提示級(jí)別和觸發(fā)檢查和快速修復(fù)本地代碼。
通過IDE插件增量生成,同步模型變更到本地代碼:IDE插件可以直接將模型的變更同步到本地模型對(duì)應(yīng)的代碼上。具體操作,請(qǐng)參見同步平臺(tái)模型到本地代碼。
通過IDE插件標(biāo)注代碼為模型或創(chuàng)建新的模型:您也可以在本地通過標(biāo)注或創(chuàng)建等方式修改已有模型,或新增模型。具體操作,請(qǐng)參見快速標(biāo)記代碼為模型和手動(dòng)新建本地模型代碼。
提交推送代碼,按需發(fā)起代碼評(píng)審:本地代碼修改可以正常提交推送和代碼評(píng)審。
通過IDE插件,快速提交代碼中模型變更到平臺(tái):本地通過步驟11新增或修改的代碼反映模型可以通過IDE插件快速掃描提交到平臺(tái)。具體操作,請(qǐng)參見在Tool Window掃描本地模型。
通過以上步驟普通的平臺(tái)模型的變更同步到代碼,以及代碼側(cè)的變更上報(bào)到平臺(tái)都已達(dá)成。接下來我們看一下數(shù)據(jù)模型的變動(dòng)如何同步。
數(shù)據(jù)庫調(diào)整:平臺(tái)的數(shù)據(jù)模型調(diào)整,可通過步驟4修改庫表(這個(gè)步驟可以從直接修改數(shù)據(jù)庫開始)。
最新庫表導(dǎo)入數(shù)據(jù)模型:通過BizWorks平臺(tái)功能,將最新的庫表導(dǎo)入數(shù)據(jù)模型。
按需調(diào)整關(guān)聯(lián):如果平臺(tái)模型版本有變動(dòng),可以在應(yīng)用平臺(tái)的模型管理中關(guān)聯(lián)最新的模型版本。
平臺(tái)增量代碼生成:數(shù)據(jù)模型目前需要通過平臺(tái)的代碼生成功能增量生成模型變動(dòng)到代碼中。增量生成的代碼可以基于已有分支生成到新分支。新生成的分支會(huì)生成到代碼倉庫中,后續(xù)研發(fā)人員可以拉取新分支到本地,并選取其中需要的部分修改合并到開發(fā)中的分支。
步驟17之后,可以重復(fù)步驟6之后的流程,不斷迭代修改代碼和平臺(tái)模型。
上述為研發(fā)階段簡單流程中平臺(tái)模型和代碼的雙向聯(lián)動(dòng)流程。以上的流程介紹較為簡單,主要是介紹一種可能的且較為普遍的雙向聯(lián)動(dòng)流程。上述流程各個(gè)步驟之間的順序也并非嚴(yán)格順序,可以靈活組合。
引入角色權(quán)限區(qū)分的雙向聯(lián)動(dòng)研發(fā)流程
在不區(qū)分角色權(quán)限的簡單雙向聯(lián)動(dòng)研發(fā)流程中,研發(fā)人員同時(shí)擁有模型和代碼的操作權(quán)限,對(duì)代碼和模型同時(shí)負(fù)責(zé)。但有些團(tuán)隊(duì)可能對(duì)研發(fā)人員有較為明確的角色區(qū)分,只有特定的負(fù)責(zé)人需要對(duì)平臺(tái)模型設(shè)計(jì)和關(guān)鍵操作進(jìn)行管控操作。因此,我們?cè)诤唵瘟鞒痰幕A(chǔ)上引入權(quán)限區(qū)分。下圖中綠色部分線條是需要有權(quán)限管控的操作,黑色的線條是不需權(quán)限管控的研發(fā)操作。
上圖中的引入角色權(quán)限區(qū)分的雙向聯(lián)動(dòng)研發(fā)流程與不區(qū)分角色權(quán)限的簡單雙向聯(lián)動(dòng)研發(fā)流程的區(qū)別詳情如下:
步驟1~4無區(qū)別,步驟5由負(fù)責(zé)人創(chuàng)建好對(duì)應(yīng)的迭代分支后,同時(shí)將迭代分支設(shè)為保護(hù)分支,只有迭代負(fù)責(zé)人有權(quán)限提交合并。
步驟6研發(fā)人員在本地拉取開發(fā)分支。
步驟7在開發(fā)分支基礎(chǔ)上Checkout Feature分支或個(gè)人開發(fā)分支,并在本地開發(fā)。因?yàn)榈拈_發(fā)分支是設(shè)保護(hù)的,屬于權(quán)限管控分支。研發(fā)人員需要在普通的分支上面開發(fā),后續(xù)再通過代碼評(píng)審后合并到權(quán)限管控的迭代開發(fā)分支上。
步驟9~11單向從平臺(tái)同步平臺(tái)模型信息到本地,對(duì)本地代碼變更與不區(qū)分角色權(quán)限的簡單雙向聯(lián)動(dòng)研發(fā)流程并無區(qū)別。
步驟12提交推送代碼并發(fā)起代碼評(píng)審,此處的代碼評(píng)審是必須的,迭代負(fù)責(zé)人需要對(duì)代碼以及代碼反映的模型進(jìn)行審核。
步驟13代碼審核,Pull開發(fā)分支最新代碼,調(diào)整開發(fā)。在研發(fā)發(fā)起代碼審核后,迭代負(fù)責(zé)人需要審核和調(diào)整。除了代碼審核外,模型的審核負(fù)責(zé)人需要借助插件或平臺(tái)掃描代碼并與平臺(tái)模型對(duì)比。如果需要修改調(diào)整則需要拉取代碼到本地。
步驟14通過IDE插件雙向同步,負(fù)責(zé)人可以將代碼拉取到本地后借助IDE查看代碼Diff,也可以借助IDE插件對(duì)代碼和平臺(tái)模型進(jìn)行雙向同步。因?yàn)樨?fù)責(zé)人擁有模型修改權(quán)限,同步過程與不區(qū)分角色權(quán)限的簡單雙向聯(lián)動(dòng)研發(fā)流程沒有區(qū)別,可以參考其步驟9~13。
步驟15~18為數(shù)據(jù)模型變動(dòng)增量到代碼,與不區(qū)分角色權(quán)限的簡單雙向聯(lián)動(dòng)研發(fā)流程并無區(qū)別。
上述流程中,對(duì)于代碼和代碼反映模型的變動(dòng)需要有權(quán)限管控。
因?yàn)榇a反映的模型和代碼是一體的,所以借助代碼的保護(hù)分支、代碼評(píng)審、合并的權(quán)限管控機(jī)制,把代碼反映模型變動(dòng)后的模型上報(bào)的操作管控機(jī)制融入其中。沒有權(quán)限的研發(fā)人員只可以單向同步平臺(tái)模型到代碼中。擁有權(quán)限的負(fù)責(zé)人在接受了代碼合并后,再按照不區(qū)分角色權(quán)限的簡單雙向聯(lián)動(dòng)研發(fā)流程的上報(bào)機(jī)制把代碼反映模型上報(bào)到平臺(tái),即完成了有權(quán)限區(qū)分下的雙向聯(lián)動(dòng)。