O 引言
以往MES系統項目的開發都是各個項目獨立地進行設計和開發,而這些項目中有一部分需求和功能有相同的地方,這樣,就會在一定程度上造成重復勞動和資源浪費。為此,筆者將業務需求轉化為模型,開發了一套基于模型驅動的系統平臺,同時搭載多種行業模型包。這樣,當項目應用時,就可以根據需要對模型進行簡單修改,然后直接滿足項目需求。另外,此平臺依舊保留有快速的二次開發接口,這樣不但可以縮短整個系統的開發周期,而且可以大量節約人力物力資源。該系統平臺主要包括系統管理、建模平臺、工作流、業務系統等。本文主要講述建模平臺的設計與實現方法。
1 DSL概述
Visual St udio DSL(Domain-Specific Language,特定領域語言)工具是微軟公司針對特定領域開發而專門設計的。特定領域開發是一種用于解決重復發生的問題的方法,是可以使用DSL工具作為自動生成相同或相似代碼的一種方式。DSL是指軟件開發中出于某特定考慮而設計的比較小的、目標明確的語言。它們的作用是使用某特定領域里慣用的符號或者表示法對該領域的實體或者流程進行建模。
DSL工具提供有一種圖形化的操作方式。開始創建領域特定語言(DSL)是圍繞DSL設計器進行的,設計器的功能是設計和產生DSL,或者設
計依附于可生成代碼DSL的模型。
域模型(domain model)是DSL定義的核心部分。域模型就像DSL的語法,它定義了域類(domain class)和域關系(domain relationship),即定義了組成模型的要素,并給出了將這些要素互相聯系在一起的規則。域模型和表示是分離的,它僅定義了DSL所要處理的概念層上的內容,而并沒有給出如何在圖中表示這些概念。在DSL設計器中,圖形和域類的對應關系是非常直觀的,有多種基本的圖形和連接線類型可供選擇,在定義了一組圖形之后,還要定義一組圖形的映射關系,也就是定義用哪個圖形或者連接線來顯示某個域類或者域關系。表示層和底層模型相分離的設計,可以在不改動模型的情況下,合理改變域模型的表示方式。
在用DSL設計器完成DSL的定義后,將從這個DSL定義生成編輯和處理DSL實例工具的代碼,然后就可通過寫一些附加的代碼,來增強所產生的設計器的功能。
2 模型驅動的建模平臺設計
模型驅動就是對企業的業務需求進行分析后,通過友好的圖形化用戶交互界面將企業的業務需求轉化為模型,圖1為其建模平臺示意圖。這樣,通過實現各種業務模塊(例如:設備管理)系統功能(例如:設備停用)的建模配置,系統就可將其自動轉化為機器可讀和高度抽象的平臺無關模型,這些模型獨立于實現技術和語言,并以標準化的XML方式儲存。系統可根據模型生成基于SOA的運行代碼,并可通過發布解決方案的方式來將建立好的業務模型集成到系統運行平臺之中,最后在系統運行平臺上運行。建模平臺可支持使用過程中動態調整流程、動態配置業務和展示信息,可實現軟件的配置與信息管理的一體化應用。當業務發生變化后,也可以在系統中修改原有的業務模型并重新發布。其方便地改變特點,可以真正實現快速滿足客戶業務變化的需要。
建模平臺的設計主要分為三部分:數據模型、后臺服務和前臺頁面,圖2所示為建模平臺的模型圖。
數據模型的元素包括表模型和視圖模型,是對業務功能單元的底層功能的封裝,它針對數據庫表和視圖映射對象,包括常用的增刪改查等基本操作和屬性。元素的建立可以通過圖形化的方式配置數據庫表和視圖,并調用數據庫生成模板生成到數據庫,也可以從數據庫中添加已存在的表和視圖。數據模型文件的存儲格式為XML文件格式。數據模型配置完成后,即可根據當前生成引擎創建數據模型對應運行代碼文件,即讀取表或視圖模型對應的模板,并根據數據模型配置文件中的配置信息替換模板相應信息,等生成的代碼準備好后,可對其進行編譯,編譯成功,則可在指定位置生成相應的動態鏈接庫。
后臺服務包括服務方法及方法內容的配置,是對業務功能所要執行的一系列活動的封裝,就是根據業務邏輯來組合數據模型元素的操作,即配置各相關數據模型元素操作的執行順序及關聯關系,創建業務功能服務及方法。由于通過模型驅動可提供業務敏捷性,故能靈活地適應不斷變化的業務,一旦需要,就可以對現有服務進行必要的更改,從而達到業務驅動服務的目的。后臺服務文件的存儲格式為XML文件格式。后臺服務配置完成后,即可根據當前生成引擎創建服務所對應的運行代碼文件。
前臺頁面是業務系統的展現層,具體體現為與最終用戶交互的界面。創建前臺功能頁面,可通過向導的方式完成對頁面信息的配置。前臺頁面部分有三種預制頁面布局模板,分別為單表結構、上下主從結構和左樹右表主從結構。用戶操作時,系統將調用后臺服務來完成業務功能。
3 建模平臺的實現
數據模型、后臺服務這兩部分都是通過微軟提供的DSL來定義、生成和定制圖形語言,從而實現真正的用模型來完成驅動軟件開發的目的。完整的數據模型和后臺服務DSL設計過程一般包含兩個階段:
其一是為數據模型和后臺服務的DSL文法設計域類、域關系及其相應的圖形表示。簡單地說,就是為數據模型和后臺服務語言設計圖形、連接器和底層的元模型(包括文字性屬性)。
其二是寫代碼模板,即使用存儲在DSL中的實例信息來產生對應的代碼。它主要包括編譯生成動態鏈接庫dll文件和表視圖模型生成到數據庫兩部分。代碼生成通常是基于TextTemplate (.tt)文件的。
創建數據模型DSL(DataModel)需要創建一個Minimal Language模板解決方案,它是包括一個矩形方框類型和一個連線類型的語言模型。后臺服務DSL(Service)需要創建一個Task Flow模板解決方案,類似于UML活動圖的語言模型,其方框可以被放置在泳道內。DataModel和Set-vice被稱為DSL的根。通常情況下,當DSL在設計器中顯示時,根由整個圖表示。同時,它也是圖保存后生成文件的XML樹的根。DSL設計器主窗口中也包含兩個泳道(列):在左側的是域模型,包括域類和域關系;右側定義的是將顯示給用戶看的圖形和連接器。設計域類和域關系時,數據模型包括表、普通視圖(配置方式形成視圖)、自定義視圖(手工書寫SQL語句形成視圖)域類及其一些屬性,后臺服務包括開始、結束、增加、刪除、修改、查詢等操作域類及域關系,并與圖形(定義的建模語言的圖形標識)映射好,然后在DSL資源管理器中添加到工具箱。數據模型實例文件以XML文件格式存儲,元素的表示采用DSL定義中的名稱小寫格式,而連接則采用元素名稱的語法路徑方式。
數據模型和后臺服務DSL設計器的代碼是根據DSL的定義文件產生的。點擊Visual Studio主窗口解決方案資源管理器工具欄上的Transfo-rm AllTemplate按鈕,可啟動代碼的自動生成,DataModel和Serice解決方案下的GenerateCode文件夾下有很多擴展名為.tt的文件模板文件,每個.tt文件都有一個自動產生的附屬文件,這些附屬文件中的所有代碼都會被重新生成。此外,還可通過對生成代碼添加自定義代碼來實現驗證約束或者擴展生成設計器的功能。
前臺頁面的核心是頁面信息配置。在信息配置頁面中,首先應輸入頁面編碼等信息,然后選擇頁面所屬布局模板類型,再單擊“下一步”,進入頁面面板配置頁面。增加頁面時,后臺程序首先讀取頁面配置文件的模式文件,然后根據所選模板類型讀取相應的模板標準配置文件(如單表模板),同時生成頁面的GUID標識號;如需修改頁面配置,后臺程序首先要讀取頁面配置文件的模式文件,然后讀取頁面對應的配置文件。不管是增加或修改,此時都會生成一個全局數據集gConfigFileDs。此后,單擊完成按鈕,后臺程序會將修改后的gConfigFileDs寫回到頁面配置文件(該文件的名稱為CUID),并調用Lib目錄下的解析器生成主JS文件。
頁面布局模板類型目前可支持如下三種:
(1)單表結構
頁面上只放置一個普通的網格面板,可提供對單表的增刪改查功能。
(2)上下主從結構
頁面上下各放置一個網格面板,其中上方為主表網格面板,下方為從表網格面板。主表網格面板有增刪改查功能,從表網格面板有增刪改功能。當單擊選擇主表網格面板的某一記錄行時,從表網格面板就會顯示與主表記錄相關的所有從表記錄。
(3)左樹右表主從結構
該結構頁面左方放置一個樹面板,右方一個網格面板,其中左方面板用于主表顯示,右方面板用于從表顯示。單點擊選中樹面板上的某一結點,右方網格面板就會顯示與此樹結點相關的所有從表記錄。
4 結束語
本文利用DSL特定領域語言實現基于模型驅動的MES系統建模平臺,該方法可以快速的將業務需求轉化為模型,縮短整個系統的開發周期,大量節約人力物力資源。但該建模平臺還存在一定的缺陷和不足,就是對一些特別復雜的業務需求不能直接采取配置的方式來實現,而必須通過自己手寫代碼或者存儲過程等才能實現。下一步工作的重點就是解決掉這些缺陷和不足。
評論
查看更多