李忠民 何鑫
摘? 要:模型驅(qū)動(dòng)架構(gòu)是一個(gè)抽象的理論框架,要使其真正落地實(shí)踐,必須結(jié)合項(xiàng)目實(shí)際構(gòu)建一個(gè)可行的模型序列,并給出一套模型轉(zhuǎn)換規(guī)則。在某大型央企的業(yè)務(wù)中臺(tái)項(xiàng)目對(duì)該模型序列進(jìn)行了研究,并總結(jié)出一套模型轉(zhuǎn)換規(guī)則,即業(yè)務(wù)過(guò)程模型(業(yè)務(wù)流程模型、業(yè)務(wù)用例模型)、業(yè)務(wù)對(duì)象模型、領(lǐng)域模型、組件模型、數(shù)據(jù)模型(概念模型、邏輯模型、物理模型)的組成的模型序列。
關(guān)鍵詞:模型驅(qū)動(dòng)架構(gòu);業(yè)務(wù)過(guò)程建模;用例模型;領(lǐng)域模型;組件模型;模型轉(zhuǎn)換
中圖分類(lèi)號(hào):TP311.52? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)18-0104-04
Abstract:Model driven architecture is an abstract theoretical framework. To make it truly practical,it is necessary to construct a feasible model sequence based on the actual project and give a set of model conversion rules. This paper studies the model sequence in the financial middle office project of a large central enterprise,and summarizes a set of model transformation rules,that is,the business process model(business process model,business use case model),business object model,domain model,component model and data model(conceptual model,logical model,physical model).
Keywords:model driven architecture;business process modeling;use case model;domain model;component model;model transformation
0? 引? 言
模型驅(qū)動(dòng)架構(gòu)(MDA)方法論對(duì)系統(tǒng)分析和設(shè)計(jì)領(lǐng)域進(jìn)行了概括和抽象,該方法論實(shí)現(xiàn)了業(yè)務(wù)需求的結(jié)構(gòu)化描述;它可以確保設(shè)計(jì)反映業(yè)務(wù),確保設(shè)計(jì)意圖貫徹到實(shí)現(xiàn)中去,做到分析設(shè)計(jì)過(guò)程中業(yè)務(wù)信息和設(shè)計(jì)信息全繼承、可追溯、不失真,從而讓客戶(hù)更有可能獲得他們真正需要的系統(tǒng)。作為該大型央企業(yè)務(wù)中臺(tái)的承建單位,公司認(rèn)識(shí)到模型驅(qū)動(dòng)架構(gòu)的優(yōu)勢(shì),決心結(jié)合業(yè)務(wù)中臺(tái)的建設(shè)任務(wù)展開(kāi)MDA方法論的深入研究,并利用MDA指導(dǎo)業(yè)務(wù)中臺(tái)的建設(shè)實(shí)施。在此背景下,作者結(jié)合業(yè)務(wù)中臺(tái)設(shè)計(jì)開(kāi)發(fā)工作實(shí)踐,提出一個(gè)可行的模型序列,并給出了模型轉(zhuǎn)換規(guī)則,本文承接《模型驅(qū)動(dòng)架構(gòu)方法論在業(yè)務(wù)中臺(tái)中的落地實(shí)踐研究(一)》繼續(xù)就模型序列進(jìn)行討論。
1? 上篇回顧
從業(yè)務(wù)空間到系統(tǒng)實(shí)現(xiàn)要經(jīng)過(guò)四個(gè)視角的轉(zhuǎn)換,我們稱(chēng)之為域,即業(yè)務(wù)域、應(yīng)用域、數(shù)據(jù)域、技術(shù)域。每個(gè)域通過(guò)對(duì)一個(gè)或多個(gè)模型的建模,從不同視角描述同一個(gè)事物——公司業(yè)務(wù)條線(xiàn)和業(yè)務(wù)有關(guān)專(zhuān)業(yè)條線(xiàn)的業(yè)務(wù)。通過(guò)依次構(gòu)建序列上的每個(gè)模型,描述模型中容納的概念,在模型序列的引導(dǎo)下,由業(yè)務(wù)逐漸逼近系統(tǒng)實(shí)現(xiàn)。
上篇文章中討論了業(yè)務(wù)域和應(yīng)用域的幾個(gè)模型的建模實(shí)踐經(jīng)驗(yàn),下面接上文繼續(xù)討論數(shù)據(jù)域和技術(shù)域的幾個(gè)模型的建模方法。
在數(shù)據(jù)域,我們從數(shù)據(jù)角度描述業(yè)務(wù),用數(shù)據(jù)的語(yǔ)言描述“做什么、怎么做”,數(shù)據(jù)域我們定義三個(gè)模型:概念模型、邏輯模型、物理模型。
2? 概念模型
個(gè)人理解概念模型、邏輯模型、物理模型是從純粹數(shù)據(jù)建模的角度建立的一個(gè)方法論,是和領(lǐng)域驅(qū)動(dòng)并行發(fā)展的兩個(gè)方法論。領(lǐng)域模型包含數(shù)據(jù)和行為,而概念模型只包含數(shù)據(jù),二者都是業(yè)務(wù)分析的結(jié)果,定位和作用重疊。當(dāng)我們采用MDA方法,且模型序列中存在領(lǐng)域模型時(shí),概念模型已經(jīng)沒(méi)有存在的必要。為了確保數(shù)據(jù)模型建模思想的完整性,避免對(duì)數(shù)據(jù)模型建模工作做出顛覆性變動(dòng),項(xiàng)目中約定:從領(lǐng)域模型中抽取的聚合根及聚合根之間的關(guān)系,刪除聚合根的行為(方法),就構(gòu)成了概念模型。
故概念模型可以利用工具從領(lǐng)域模型自動(dòng)轉(zhuǎn)換過(guò)來(lái),偽代碼如圖1所示。
3? 邏輯模型
邏輯模型是一種平臺(tái)無(wú)關(guān)模型,只與業(yè)務(wù)相關(guān),反映業(yè)務(wù)事實(shí)顯示,符合關(guān)系數(shù)據(jù)模型三范式。項(xiàng)目中約定邏輯模型采用關(guān)系數(shù)據(jù)模型,并規(guī)定業(yè)務(wù)中臺(tái)的邏輯模型只有一個(gè)。
3.1? 領(lǐng)域模型到邏輯模型的轉(zhuǎn)換
3.1.1? 實(shí)體的轉(zhuǎn)換
邏輯模型繼承于領(lǐng)域模型,本項(xiàng)目約定領(lǐng)域模型中的領(lǐng)域?qū)ο笕サ舴椒礊檫壿嬆P偷膶?shí)體原型,部分轉(zhuǎn)換過(guò)程可以利用工具自動(dòng)完成。
由于領(lǐng)域模型存在抽象實(shí)體,邏輯模型則都是具體化的實(shí)體,故由領(lǐng)域模型到邏輯模型的實(shí)體的轉(zhuǎn)換并不是一對(duì)一的自動(dòng)映射,需要根據(jù)具體情況進(jìn)行分析,這是MDA的模型轉(zhuǎn)化過(guò)程中人工干預(yù)點(diǎn)之一,轉(zhuǎn)換規(guī)則為:
(1)領(lǐng)域模型中與其他類(lèi)沒(méi)有泛化關(guān)系的實(shí)體轉(zhuǎn)換為一個(gè)表,實(shí)體的屬性就是表的字段,實(shí)體的標(biāo)識(shí)碼就是表的關(guān)鍵字。
(2)存在泛化關(guān)系的實(shí)體有三種轉(zhuǎn)換方式:一是父類(lèi)實(shí)體合并到子類(lèi)中,如果存在一個(gè)繼承鏈則遞歸合并,合并后的類(lèi)作為邏輯模型實(shí)體,此時(shí)父類(lèi)的關(guān)鍵字轉(zhuǎn)化為子類(lèi)的唯一索引;父類(lèi)的屬性集合與子類(lèi)的屬性集合合并,如果合并后存在重復(fù)定義的情況則去重處理,如果存在重載情況(父子類(lèi)屬性同名但語(yǔ)義不同),則父類(lèi)屬性改名為父類(lèi)名+原屬性名。二是父類(lèi)、子類(lèi)分別轉(zhuǎn)化為邏輯模型實(shí)體,此時(shí)父類(lèi)的主關(guān)鍵字加入子類(lèi)作為唯一索引,同時(shí)作為連接父類(lèi)和子類(lèi)兩個(gè)實(shí)體的外鍵。三是父類(lèi)轉(zhuǎn)化為實(shí)體,子類(lèi)退化為一個(gè)枚舉值屬性(如種類(lèi))作為父類(lèi)的一個(gè)屬性。制定了領(lǐng)域模型向邏輯模型的實(shí)體轉(zhuǎn)換規(guī)則以后,可以利用工具完成實(shí)體的自動(dòng)遷移。
3.1.2? 屬性的轉(zhuǎn)換
領(lǐng)域?qū)ο蟮膶傩杂成錇檫壿嬆P蛯?duì)應(yīng)實(shí)體的屬性,屬性語(yǔ)義和值域(Domain)完全對(duì)拷遷移,不進(jìn)行變化,此過(guò)程可以利用工具完成。
3.1.3? 關(guān)系的轉(zhuǎn)換
領(lǐng)域模型中的一對(duì)一、一對(duì)多、多對(duì)一關(guān)聯(lián)關(guān)系轉(zhuǎn)化為邏輯模型中的實(shí)體間關(guān)系,這個(gè)過(guò)程可以利用工具自動(dòng)完成;多對(duì)多關(guān)聯(lián)關(guān)系則轉(zhuǎn)化為實(shí)體,需要建立新的實(shí)體,與該關(guān)系兩端的實(shí)體分別建立一對(duì)多或一對(duì)一關(guān)聯(lián)關(guān)系。
領(lǐng)域模型中的泛化經(jīng)過(guò)父子類(lèi)的合并處理,在邏輯模型中已經(jīng)不存在,不必遷移。
3.2? 邏輯模型的重構(gòu)
由領(lǐng)域模型轉(zhuǎn)換而來(lái)的邏輯模型還需要進(jìn)行重構(gòu)才能成為規(guī)范的邏輯模型,需要按照關(guān)系數(shù)據(jù)模型三范式的原則,審視檢查遷移步驟獲得的邏輯模型,進(jìn)行邏輯模型重構(gòu),主要包括識(shí)別和建立主鍵、識(shí)別和建立外鍵、識(shí)別和建立唯一索引、拆分復(fù)合屬性、領(lǐng)域模型中存在的多對(duì)多關(guān)系轉(zhuǎn)化為實(shí)體等工作。
4? 物理模型
物理模型是邏輯模型在特定平臺(tái)上的實(shí)現(xiàn),是平臺(tái)相關(guān)模型。業(yè)務(wù)中臺(tái)的物理模型有多個(gè):基于阿里云的OLTP數(shù)據(jù)庫(kù)物理模型、基于阿里云的分析域數(shù)據(jù)集市物理模型,基于華為云的OLTP數(shù)據(jù)庫(kù)物理模型、基于華為云的分析域數(shù)據(jù)集市物理模型,他們都繼承于同一個(gè)邏輯模型。物理模型全面繼承了邏輯模型的實(shí)體、關(guān)系、主外鍵等元素,同時(shí)根據(jù)具體平臺(tái)的實(shí)現(xiàn),調(diào)整了屬性的數(shù)據(jù)類(lèi)型、長(zhǎng)度、精度,并出于性能、存儲(chǔ)等考慮進(jìn)行了一些冗余設(shè)計(jì),增加普通索引、分庫(kù)分表設(shè)計(jì)等平臺(tái)相關(guān)設(shè)計(jì)。
(1)邏輯模型到物理模型的遷移,遷移過(guò)程包括表的轉(zhuǎn)換:邏輯模型實(shí)體轉(zhuǎn)化為物理模型的表;字段的轉(zhuǎn)換:邏輯模型的屬性轉(zhuǎn)換為物理模型的字段;表間關(guān)系的轉(zhuǎn)換:邏輯模型的實(shí)體間關(guān)系對(duì)轉(zhuǎn)為物理模型相應(yīng)表之間的關(guān)系;主鍵的轉(zhuǎn)換:邏輯模型的主鍵轉(zhuǎn)換為物理模型相應(yīng)表的唯一索引等四方面的工作,這些過(guò)程可以在工具輔助下自動(dòng)完成。
(2)物理模型的重構(gòu):從邏輯模型對(duì)轉(zhuǎn)過(guò)來(lái)的物理模型并不是最終可用的物理模型,其只包含了業(yè)務(wù)知識(shí),還沒(méi)有反映技術(shù)實(shí)現(xiàn),故還需要根據(jù)具體的技術(shù)實(shí)現(xiàn)平臺(tái)相關(guān)的一些轉(zhuǎn)換,包括但不限于以下內(nèi)容:1)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換:邏輯模型的數(shù)據(jù)類(lèi)型還是抽象數(shù)據(jù)類(lèi)型,需要轉(zhuǎn)換為具體技術(shù)實(shí)現(xiàn)支持的數(shù)據(jù)類(lèi)型,如在Oracle中的字符型轉(zhuǎn)換為varchar2或char,在MySQL中則轉(zhuǎn)換為varchar或者char;2)冗余設(shè)計(jì):出于性能考慮,需要做一些違反范式標(biāo)準(zhǔn)但必要的冗余設(shè)計(jì);3)存儲(chǔ)空間規(guī)劃:為表分配初始存儲(chǔ)空間大小、存儲(chǔ)空間位置等等;4)分庫(kù)、分區(qū)、分表:出于性能、穩(wěn)定性等考慮,規(guī)劃分庫(kù)、分區(qū)、分表方案;5)普通索引的建立;6)視圖的建立;7)歷史表、中間表、臨時(shí)表的建立。
5? 模型驅(qū)動(dòng)架構(gòu)的概念模型
分析MDA的過(guò)程,可以看到模型的建模過(guò)程就是如下過(guò)程的不斷重復(fù):
(1)遷移:繼承前一個(gè)模型的數(shù)據(jù)。
(2)建模:定義新的概念,并識(shí)別這些概念的關(guān)系。
(3)重構(gòu):合并、去重、加工、調(diào)整。
(4)輸出:輸出加工后的數(shù)據(jù)供下一個(gè)模型使用。
模型能夠揭示事物的本質(zhì),描述一件事物最簡(jiǎn)潔的方法是給出其模型,作為一個(gè)總結(jié),我們拾取上面介紹的各種概念,建立MDA的概念模型,如圖2所示。
6? 結(jié)? 論
MDA方法論的核心思想是通過(guò)對(duì)模型序列中的模型逐個(gè)建模,引領(lǐng)我們逐步由業(yè)務(wù)逼近系統(tǒng)實(shí)現(xiàn),每一個(gè)模型都繼承前一個(gè)模型的全量設(shè)計(jì)成果,在此基礎(chǔ)上再進(jìn)行重構(gòu)、提升,然后再作為下一個(gè)模型的輸入,直至系統(tǒng)實(shí)現(xiàn)。MDA方法論不但給出了系統(tǒng)分析設(shè)計(jì)的全局性的、協(xié)調(diào)一致的全景視圖,而且實(shí)踐證明該方法論是完全可以落地的,MDA 能夠確保每一項(xiàng)設(shè)計(jì)都有依據(jù),每一個(gè)結(jié)論都可追溯,能夠確保設(shè)計(jì)成果反映業(yè)務(wù),確保設(shè)計(jì)成果貫徹落實(shí)到實(shí)現(xiàn)中去,是一種非常有價(jià)值的系統(tǒng)分析和設(shè)計(jì)方法。
參考文獻(xiàn):
[1] 張鵬,李忠民.企業(yè)級(jí)數(shù)據(jù)模型全域一致性的一種解決方案 [J].智庫(kù)時(shí)代,2018(35):135-136+139.
[2] FRANKEL D S.應(yīng)用MDA [M].鮑志云,譯.北京:人民郵電出版社,2003.
[3] KLEPPE A,WARMER J,BAST W.解析MDA [M].鮑志云,譯.北京:人民郵電出版社,2004.
作者簡(jiǎn)介:李忠民(1967—),男,漢族,山東聊城人,技術(shù)專(zhuān)家,中級(jí)職稱(chēng),本科,研究方向:銀行應(yīng)用系統(tǒng)設(shè)計(jì)開(kāi)發(fā)、大型互聯(lián)網(wǎng)平臺(tái)架構(gòu)設(shè)計(jì)、大數(shù)據(jù)應(yīng)用系統(tǒng)設(shè)計(jì);何鑫(1988—),男,漢族,內(nèi)蒙古烏蘭察布人,助理工程師,本科,研究方向:國(guó)網(wǎng)公司統(tǒng)一數(shù)據(jù)模型(SG-CIM)設(shè)計(jì)。