利用DSL語(yǔ)言來(lái)實(shí)現(xiàn)MES系統(tǒng)建模平臺(tái)
數(shù)據(jù)模型的元素包括表模型和視圖模型,是對(duì)業(yè)務(wù)功能單元的底層功能的封裝,它針對(duì)數(shù)據(jù)庫(kù)表和視圖映射對(duì)象,包括常用的增刪改查等基本操作和屬性。元素的建立可以通過(guò)圖形化的方式配置數(shù)據(jù)庫(kù)表和視圖,并調(diào)用數(shù)據(jù)庫(kù)生成模板生成到數(shù)據(jù)庫(kù),也可以從數(shù)據(jù)庫(kù)中添加已存在的表和視圖。數(shù)據(jù)模型文件的存儲(chǔ)格式為XML文件格式。數(shù)據(jù)模型配置完成后,即可根據(jù)當(dāng)前生成引擎創(chuàng)建數(shù)據(jù)模型對(duì)應(yīng)運(yùn)行代碼文件,即讀取表或視圖模型對(duì)應(yīng)的模板,并根據(jù)數(shù)據(jù)模型配置文件中的配置信息替換模板相應(yīng)信息,等生成的代碼準(zhǔn)備好后,可對(duì)其進(jìn)行編譯,編譯成功,則可在指定位置生成相應(yīng)的動(dòng)態(tài)鏈接庫(kù)。
后臺(tái)服務(wù)包括服務(wù)方法及方法內(nèi)容的配置,是對(duì)業(yè)務(wù)功能所要執(zhí)行的一系列活動(dòng)的封裝,就是根據(jù)業(yè)務(wù)邏輯來(lái)組合數(shù)據(jù)模型元素的操作,即配置各相關(guān)數(shù)據(jù)模型元素操作的執(zhí)行順序及關(guān)聯(lián)關(guān)系,創(chuàng)建業(yè)務(wù)功能服務(wù)及方法。由于通過(guò)模型驅(qū)動(dòng)可提供業(yè)務(wù)敏捷性,故能靈活地適應(yīng)不斷變化的業(yè)務(wù),一旦需要,就可以對(duì)現(xiàn)有服務(wù)進(jìn)行必要的更改,從而達(dá)到業(yè)務(wù)驅(qū)動(dòng)服務(wù)的目的。后臺(tái)服務(wù)文件的存儲(chǔ)格式為XML文件格式。后臺(tái)服務(wù)配置完成后,即可根據(jù)當(dāng)前生成引擎創(chuàng)建服務(wù)所對(duì)應(yīng)的運(yùn)行代碼文件。
前臺(tái)頁(yè)面是業(yè)務(wù)系統(tǒng)的展現(xiàn)層,具體體現(xiàn)為與最終用戶交互的界面。創(chuàng)建前臺(tái)功能頁(yè)面,可通過(guò)向?qū)У姆绞酵瓿蓪?duì)頁(yè)面信息的配置。前臺(tái)頁(yè)面部分有三種預(yù)制頁(yè)面布局模板,分別為單表結(jié)構(gòu)、上下主從結(jié)構(gòu)和左樹右表主從結(jié)構(gòu)。用戶操作時(shí),系統(tǒng)將調(diào)用后臺(tái)服務(wù)來(lái)完成業(yè)務(wù)功能。
數(shù)據(jù)模型、后臺(tái)服務(wù)這兩部分都是通過(guò)微軟提供的DSL來(lái)定義、生成和定制圖形語(yǔ)言,從而實(shí)現(xiàn)真正的用模型來(lái)完成驅(qū)動(dòng)軟件開發(fā)的目的。完整的數(shù)據(jù)模型和后臺(tái)服務(wù)DSL設(shè)計(jì)過(guò)程一般包含兩個(gè)階段:
其一是為數(shù)據(jù)模型和后臺(tái)服務(wù)的DSL文法設(shè)計(jì)域類、域關(guān)系及其相應(yīng)的圖形表示。簡(jiǎn)單地說(shuō),就是為數(shù)據(jù)模型和后臺(tái)服務(wù)語(yǔ)言設(shè)計(jì)圖形、連接器和底層的元模型(包括文字性屬性)。
其二是寫代碼模板,即使用存儲(chǔ)在DSL中的實(shí)例信息來(lái)產(chǎn)生對(duì)應(yīng)的代碼。它主要包括編譯生成動(dòng)態(tài)鏈接庫(kù)dll文件和表視圖模型生成到數(shù)據(jù)庫(kù)兩部分。代碼生成通常是基于TextTemplate (.tt)文件的。
創(chuàng)建數(shù)據(jù)模型DSL(DataModel)需要?jiǎng)?chuàng)建一個(gè)Minimal Language模板解決方案,它是包括一個(gè)矩形方框類型和一個(gè)連線類型的語(yǔ)言模型。后臺(tái)服務(wù)DSL(Service)需要?jiǎng)?chuàng)建一個(gè)Task Flow模板解決方案,類似于UML活動(dòng)圖的語(yǔ)言模型,其方框可以被放置在泳道內(nèi)。DataModel和Set-vice被稱為DSL的根。通常情況下,當(dāng)DSL在設(shè)計(jì)器中顯示時(shí),根由整個(gè)圖表示。同時(shí),它也是圖保存后生成文件的XML樹的根。DSL設(shè)計(jì)器主窗口中也包含兩個(gè)泳道(列):在左側(cè)的是域模型,包括域類和域關(guān)系;右側(cè)定義的是將顯示給用戶看的圖形和連接器。設(shè)計(jì)域類和域關(guān)系時(shí),數(shù)據(jù)模型包括表、普通視圖(配置方式形成視圖)、自定義視圖(手工書寫SQL語(yǔ)句形成視圖)域類及其一些屬性,后臺(tái)服務(wù)包括開始、結(jié)束、增加、刪除、修改、查詢等操作域類及域關(guān)系,并與圖形(定義的建模語(yǔ)言的圖形標(biāo)識(shí))映射好,然后在DSL資源管理器中添加到工具箱。數(shù)據(jù)模型實(shí)例文件以XML文件格式存儲(chǔ),元素的表示采用DSL定義中的名稱小寫格式,而連接則采用元素名稱的語(yǔ)法路徑方式。
數(shù)據(jù)模型和后臺(tái)服務(wù)DSL設(shè)計(jì)器的代碼是根據(jù)DSL的定義文件產(chǎn)生的。點(diǎn)擊Visual Studio主窗口解決方案資源管理器工具欄上的Transfo-rm AllTemplate按鈕,可啟動(dòng)代碼的自動(dòng)生成,DataModel和Serice解決方案下的GenerateCode文件夾下有很多擴(kuò)展名為.tt的文件模板文件,每個(gè).tt文件都有一個(gè)自動(dòng)產(chǎn)生的附屬文件,這些附屬文件中的所有代碼都會(huì)被重新生成。此外,還可通過(guò)對(duì)生成代碼添加自定義代碼來(lái)實(shí)現(xiàn)驗(yàn)證約束或者擴(kuò)展生成設(shè)計(jì)器的功能。
前臺(tái)頁(yè)面的核心是頁(yè)面信息配置。在信息配置頁(yè)面中,首先應(yīng)輸入頁(yè)面編碼等信息,然后選擇頁(yè)面所屬布局模板類型,再單擊“下一步”,進(jìn)入頁(yè)面面板配置頁(yè)面。增加頁(yè)面時(shí),后臺(tái)程序首先讀取頁(yè)面配置文件的模式文件,然后根據(jù)所選模板類型讀取相應(yīng)的模板標(biāo)準(zhǔn)配置文件(如單表模板),同時(shí)生成頁(yè)面的GUID標(biāo)識(shí)號(hào);如需修改頁(yè)面配置,后臺(tái)程序首先要讀取頁(yè)面配置文件的模式文件,然后讀取頁(yè)面對(duì)應(yīng)的配置文件。不管是增加或修改,此時(shí)都會(huì)生成一個(gè)全局?jǐn)?shù)據(jù)集gConfigFileDs。此后,單擊完成按鈕,后臺(tái)程序會(huì)將修改后的gConfigFileDs寫回到頁(yè)面配置文件(該文件的名稱為CUID),并調(diào)用Lib目錄下的解析器生成主JS文件。
頁(yè)面布局模板類型目前可支持如下三種:
(1)單表結(jié)構(gòu)
頁(yè)面上只放置一個(gè)普通的網(wǎng)格面板,可提供對(duì)單表的增刪改查功能。
(2)上下主從結(jié)構(gòu)
頁(yè)面上下各放置一個(gè)網(wǎng)格面板,其中上方為主表網(wǎng)格面板,下方為從表網(wǎng)格面板。主表網(wǎng)格面板有增刪改查功能,從表網(wǎng)格面板有增刪改功能。當(dāng)單擊選擇主表網(wǎng)格面板的某一記錄行時(shí),從表網(wǎng)格面板就會(huì)顯示與主表記錄相關(guān)的所有從表記錄。
(3)左樹右表主從結(jié)構(gòu)
該結(jié)構(gòu)頁(yè)面左方放置一個(gè)樹面板,右方一個(gè)網(wǎng)格面板,其中左方面板用于主表顯示,右方面板用于從表顯示。單點(diǎn)擊選中樹面板上的某一結(jié)點(diǎn),右方網(wǎng)格面板就會(huì)顯示與此樹結(jié)點(diǎn)相關(guān)的所有從表記錄。
4 結(jié)束語(yǔ)
本文利用DSL特定領(lǐng)域語(yǔ)言實(shí)現(xiàn)基于模型驅(qū)動(dòng)的MES系統(tǒng)建模平臺(tái),該方法可以快速的將業(yè)務(wù)需求轉(zhuǎn)化為模型,縮短整個(gè)系統(tǒng)的開發(fā)周期,大量節(jié)約人力物力資源。但該建模平臺(tái)還存在一定的缺陷和不足,就是對(duì)一些特別復(fù)雜的業(yè)務(wù)需求不能直接采取配置的方式來(lái)實(shí)現(xiàn),而必須通過(guò)自己手寫代碼或者存儲(chǔ)過(guò)程等才能實(shí)現(xiàn)。下一步工作的重點(diǎn)就是解決掉這些缺陷和不足。
評(píng)論