概念
模型驅動架構MDA, 全稱叫做Model Driven Architecture。
- Model:表示客觀事物的抽象表示
- Architecture:表示構成系統的部件,連接件及其約束的規約
- Model Driven: 使用模型完成軟件的分析,設計,構建,部署和維護等 開發活動
MDA起源于分離系統規約和平臺實現的思想。之前我們在凈室軟件工程中也提到過這種思想。
意思就是我們開發一個系統,基本上跟那個數學公式一樣,我們從始至終都通過證明來證明它的正確性,而不是通過測試來被動發現問題。
所以在凈室軟件工程這種思想之下,推動了模型驅動架構的思想。
基本思想
我們一開始建立起模型,再一步步把這個模型映射,生成代碼就得到我們最終需要的軟件系統。
當然,事實證明,純粹按這種思想完成這種系統的話,有一定的難度,會面臨一些困難。比如業務邏輯是繞不開的,但是一部分去使用這個思想是沒有問題的。
比如目前的可視化操作就已經在應用了,比如我們的MyBatis generator就可以幫我們生成浙這些代碼。這些其實就是按照模型映射生成的代碼。
再比如我們通過模板語法生成對應的controller,service,mApper和前端代碼增刪改查這類似的功能,也是我們的模型驅動架構。
其實模型驅動架構可能跟現在的低代碼平臺思想也有著千絲萬縷的聯系。
主要目標
- Portability(可移植性)
- Interoperability(互通性)
- Reusability(可重用性)
MDA實現流程
談到MDA的實現流程之前,得先了解它的三種核心模型。
- 平臺獨立(無關)模型(PIM)
- 具有高抽象層次,獨立于任何實現技術的模型
- 平臺相關模型(PSM)
- 為某種特定實現技術量身定做,讓你用這種技術可用的實現構造來描述系統的模型。PIM會被變換成一個或多個PSM
- 代碼Code
- 用源代碼對系統的描述(規約),每個PSM都將被轉換為代碼
PIM典型代表UML,你使用UML做出來的架構設計的一系列的東西,都可以理解為平臺無關模型,為什么呢?
因為它跟具體的代碼和具體語言是沒有關系的,同一套UML語言,后面對接可以有具體的一系列的不同語言來實現。
但是到PSM就不明確了,因為這一層是有斷代的。不同的開發工具建立出來的模型,做出來的設計不太一樣。然后再通過變換工具生成代碼。
比如一些工具通過一些可視化拖拽,就能實現對應的代碼。這就是一種典型的實現。所以說現在的低代碼平臺思想就是基于模型驅動架構的一種思想體現。
MDA開始雖然不多,但是這種思想卻是值得我們去理解,這里引用一篇文章的內容做簡單的描述。
內容擴展
MDA并沒有額外提出其他的標準和技術,它善用且整合多項已存在的標準及技術,如圖1,這是MDA官方網站首頁上的圖片,充分呈現了MDA的期望與相關技術。
從圖1最內圈看起,MDA主要使用了UML(Unified Modeling Language) ,MOF(Meta-Object Facility)及CWM(Common Warehouse Metamodel)這三項建模標準,作為PIM及PSM的建模基礎。不過,據著名建模專家邱郁惠表示,對于一般的開發人員而言,只要熟知UML統一建模語言,就可以開發MDA項目了。
MDA的第二內圈,代表公開標準或私有的實現技術平臺,有CORBA,XMI/XML,.NET,JAVA及WEB SERVICE,等等。也就是說,MDA希望能制定出各式獨特的具體平臺專屬的PSM轉換規則,并且最好可以由廠商配合設計出MDA開發工具,以便能夠將中立的PIM自動轉出特定平臺的模型PSM。
MDA的第三內圈,代表跨平臺的通用服務(Pervasive Services),MDA定義了四種服務,目錄服務(Directory Services),事務服務(Transaction Services),安全服務(Security Services)以及分布式事件及通知服務(Distributed Event and Notification Services)。OMG計劃定義該四項通用服務,讓任何平臺上的應用程序或客戶端都可以通過MDA環境,取得跨平臺的服務。
MDA的最外圍,則代表MDA可以應用在各式不同的領域環境中,諸如電子商務(E-Commerce),電信(Telecom),醫療保健(HealthCare),運輸(Transportation),航空(Space),制造(Manufacturing),金融(Finance)等領域。
對于使用MDA進行開發的過程,根據邱郁惠在其著作中的建議,可以分為四個階段:
- CIM(Computation Independent Model)- 聚焦于系統環境及需求,但不涉及系統內部的結構與運作細節。
- PIM(Platform Independent Model)- 聚焦于系統內部細節,但不涉及實現系統得具體平臺。
- PSM(Platform Specific Model)- 聚焦于系統落實于特定具體平臺的細節,如EJB,J2EE或.NET都是一種具體平臺。
- Coding – 最后程序員依據PSM的UML模型內容,按圖施工,編寫出適用于特定具體平臺的代碼。
MDA描述的軟件開發生命周期和傳統生命周期沒有大的不同,主要的區別在于開發過程創建的工件,包括PIM、PSM和代碼。
PIM是具有高抽象層次、獨立任何實現技術的模型。PIM被轉換為一個或多個PSM。
PSM是為某種特定實現技術量身定做。例如,EJB PSM是用EJB結構表達的系統模型。開發的最后一步是把每個PSM變化為代碼,PSM同應用技術密切相關。
傳統的開發過程從模型到模型的變換,或者從模型到代碼的變換是手工完成的。但是MDA的變換都是由工具自動完成的。從PIM到PSM,再從PSM到代碼都可以由工具實現。
PIM, PSM,和Code 模型被作為軟件開發生命周期中的設計工具,在傳統的開發方式中是文檔和圖表。
重要的是,它們代表了對系統不同層次的抽象,從不同的視角來看待我們的系統,將高層次的PIM 轉換到PSM 的能力提升了抽象的層次。能夠使得開發人員更加清晰地了解系統的整個架構,而不會被具體的實現技術所“污染”,同時對于復雜系統,也減少了開發人員的工作量。
有了這個擴展,相信大家對MDA架構有了更加深刻一點的理解了。
內容擴展來源:??https://www.cnblogs.com/gzitjohn/archive/2009/03/13/1410220.html??
小結
其實MDA架構是一種考試可能考得不會太多,但是我們需要理解的一種思想,所以我們不僅僅要為了考試而學習,還要通過這個東西,了解一些我們不曾了解的概念與思想。