軟件架構(gòu)設計之模型驅(qū)動架構(gòu)MDA
概念
模型驅(qū)動架構(gòu)MDA, 全稱叫做Model Driven Architecture。
- Model:表示客觀事物的抽象表示
- Architecture:表示構(gòu)成系統(tǒng)的部件,連接件及其約束的規(guī)約
- Model Driven: 使用模型完成軟件的分析,設計,構(gòu)建,部署和維護等 開發(fā)活動
MDA起源于分離系統(tǒng)規(guī)約和平臺實現(xiàn)的思想。之前我們在凈室軟件工程中也提到過這種思想。

意思就是我們開發(fā)一個系統(tǒng),基本上跟那個數(shù)學公式一樣,我們從始至終都通過證明來證明它的正確性,而不是通過測試來被動發(fā)現(xiàn)問題。
所以在凈室軟件工程這種思想之下,推動了模型驅(qū)動架構(gòu)的思想。
基本思想
我們一開始建立起模型,再一步步把這個模型映射,生成代碼就得到我們最終需要的軟件系統(tǒng)。
當然,事實證明,純粹按這種思想完成這種系統(tǒng)的話,有一定的難度,會面臨一些困難。比如業(yè)務邏輯是繞不開的,但是一部分去使用這個思想是沒有問題的。
比如目前的可視化操作就已經(jīng)在應用了,比如我們的mybatis generator就可以幫我們生成浙這些代碼。這些其實就是按照模型映射生成的代碼。
再比如我們通過模板語法生成對應的controller,service,mapper和前端代碼增刪改查這類似的功能,也是我們的模型驅(qū)動架構(gòu)。
其實模型驅(qū)動架構(gòu)可能跟現(xiàn)在的低代碼平臺思想也有著千絲萬縷的聯(lián)系。
主要目標
- Portability(可移植性)
- Interoperability(互通性)
- Reusability(可重用性)
MDA實現(xiàn)流程
談到MDA的實現(xiàn)流程之前,得先了解它的三種核心模型。
- 平臺獨立(無關(guān))模型(PIM)
- 具有高抽象層次,獨立于任何實現(xiàn)技術(shù)的模型
- 平臺相關(guān)模型(PSM)
- 為某種特定實現(xiàn)技術(shù)量身定做,讓你用這種技術(shù)可用的實現(xiàn)構(gòu)造來描述系統(tǒng)的模型。PIM會被變換成一個或多個PSM
- 代碼Code
- 用源代碼對系統(tǒng)的描述(規(guī)約),每個PSM都將被轉(zhuǎn)換為代碼

PIM典型代表UML,你使用UML做出來的架構(gòu)設計的一系列的東西,都可以理解為平臺無關(guān)模型,為什么呢?
因為它跟具體的代碼和具體語言是沒有關(guān)系的,同一套UML語言,后面對接可以有具體的一系列的不同語言來實現(xiàn)。
但是到PSM就不明確了,因為這一層是有斷代的。不同的開發(fā)工具建立出來的模型,做出來的設計不太一樣。然后再通過變換工具生成代碼。

比如一些工具通過一些可視化拖拽,就能實現(xiàn)對應的代碼。這就是一種典型的實現(xiàn)。所以說現(xiàn)在的低代碼平臺思想就是基于模型驅(qū)動架構(gòu)的一種思想體現(xiàn)。
MDA開始雖然不多,但是這種思想?yún)s是值得我們?nèi)ダ斫?,這里引用一篇文章的內(nèi)容做簡單的描述。
內(nèi)容擴展
MDA并沒有額外提出其他的標準和技術(shù),它善用且整合多項已存在的標準及技術(shù),如圖1,這是MDA官方網(wǎng)站首頁上的圖片,充分呈現(xiàn)了MDA的期望與相關(guān)技術(shù)。

從圖1最內(nèi)圈看起,MDA主要使用了UML(Unified Modeling Language) ,MOF(Meta-Object Facility)及CWM(Common Warehouse Metamodel)這三項建模標準,作為PIM及PSM的建模基礎。不過,據(jù)著名建模專家邱郁惠表示,對于一般的開發(fā)人員而言,只要熟知UML統(tǒng)一建模語言,就可以開發(fā)MDA項目了。
MDA的第二內(nèi)圈,代表公開標準或私有的實現(xiàn)技術(shù)平臺,有CORBA,XMI/XML,.NET,JAVA及WEB SERVICE,等等。也就是說,MDA希望能制定出各式獨特的具體平臺專屬的PSM轉(zhuǎn)換規(guī)則,并且最好可以由廠商配合設計出MDA開發(fā)工具,以便能夠?qū)⒅辛⒌腜IM自動轉(zhuǎn)出特定平臺的模型PSM。
MDA的第三內(nèi)圈,代表跨平臺的通用服務(Pervasive Services),MDA定義了四種服務,目錄服務(Directory Services),事務服務(Transaction Services),安全服務(Security Services)以及分布式事件及通知服務(Distributed Event and Notification Services)。OMG計劃定義該四項通用服務,讓任何平臺上的應用程序或客戶端都可以通過MDA環(huán)境,取得跨平臺的服務。
MDA的最外圍,則代表MDA可以應用在各式不同的領(lǐng)域環(huán)境中,諸如電子商務(E-Commerce),電信(Telecom),醫(yī)療保?。℉ealthCare),運輸(Transportation),航空(Space),制造(Manufacturing),金融(Finance)等領(lǐng)域。
對于使用MDA進行開發(fā)的過程,根據(jù)邱郁惠在其著作中的建議,可以分為四個階段:
- CIM(Computation Independent Model)- 聚焦于系統(tǒng)環(huán)境及需求,但不涉及系統(tǒng)內(nèi)部的結(jié)構(gòu)與運作細節(jié)。
- PIM(Platform Independent Model)- 聚焦于系統(tǒng)內(nèi)部細節(jié),但不涉及實現(xiàn)系統(tǒng)得具體平臺。
- PSM(Platform Specific Model)- 聚焦于系統(tǒng)落實于特定具體平臺的細節(jié),如EJB,J2EE或.NET都是一種具體平臺。
- Coding – 最后程序員依據(jù)PSM的UML模型內(nèi)容,按圖施工,編寫出適用于特定具體平臺的代碼。
MDA描述的軟件開發(fā)生命周期和傳統(tǒng)生命周期沒有大的不同,主要的區(qū)別在于開發(fā)過程創(chuàng)建的工件,包括PIM、PSM和代碼。
PIM是具有高抽象層次、獨立任何實現(xiàn)技術(shù)的模型。PIM被轉(zhuǎn)換為一個或多個PSM。
PSM是為某種特定實現(xiàn)技術(shù)量身定做。例如,EJB PSM是用EJB結(jié)構(gòu)表達的系統(tǒng)模型。開發(fā)的最后一步是把每個PSM變化為代碼,PSM同應用技術(shù)密切相關(guān)。
傳統(tǒng)的開發(fā)過程從模型到模型的變換,或者從模型到代碼的變換是手工完成的。但是MDA的變換都是由工具自動完成的。從PIM到PSM,再從PSM到代碼都可以由工具實現(xiàn)。
PIM, PSM,和Code 模型被作為軟件開發(fā)生命周期中的設計工具,在傳統(tǒng)的開發(fā)方式中是文檔和圖表。
重要的是,它們代表了對系統(tǒng)不同層次的抽象,從不同的視角來看待我們的系統(tǒng),將高層次的PIM 轉(zhuǎn)換到PSM 的能力提升了抽象的層次。能夠使得開發(fā)人員更加清晰地了解系統(tǒng)的整個架構(gòu),而不會被具體的實現(xiàn)技術(shù)所“污染”,同時對于復雜系統(tǒng),也減少了開發(fā)人員的工作量。
有了這個擴展,相信大家對MDA架構(gòu)有了更加深刻一點的理解了。
內(nèi)容擴展來源:??https://www.cnblogs.com/gzitjohn/archive/2009/03/13/1410220.html??
小結(jié)
其實MDA架構(gòu)是一種考試可能考得不會太多,但是我們需要理解的一種思想,所以我們不僅僅要為了考試而學習,還要通過這個東西,了解一些我們不曾了解的概念與思想。




























