架構宣言: MDA 實戰

Mikko Kontio, 生產經理, Softera

2005 年 12 月 08 日

在這一期文章中,把已經學到的關於 MDA 的知識應用於實踐,瞭解如何使用開放源碼的模型驅動架構(MDA)工具來簡化 Spring-Hibernate 的開發。

我最近的幾個專欄提供了 MDA 技術的背景知識。在這一期文章中,隨着我介紹如何用一個叫做 AndroMDA 的開放源碼 MDA 工具構建簡單的應用程序,您將看到 MDA 在實踐中如何工作。我將用 AndroMDA 構建一個管理汽車的應用程序。Spring 將充當應用程序用戶界面的基礎,Hibernate 將充當持久性框架。應用服務器是 JBoss。

這篇文章的目的不是爲了提供所使用的工具或技術的詳細信息,而是提供應用 MDA 技術的體驗。請參閱 下載一節 獲得示例應用程序的完整源代碼。請參閱 參考資料 下載 AndroMDA 和 JBoss,它們是運行示例所需要的軟件。

開始

AndroMDA 使用 XML 元數據交換(XML Metadata Interchange,XMI)文件格式的輸出,幾乎所有的建模工具都基於特定於平臺的 cartridge 生成應用程序的源代碼。針對這個示例的目的,我將採用特定於 Spring 和 Hibernate 的 cartridge。對於實際的 MDA 建模,我可以採用任何能導出(或保存)標準 XMI 的工具。AndroMDA 的主頁上推薦了一些免費或幾乎免費的工具,但是它沒有限定自己只能與這些工具一起工作。

有些 MDA 工具聲稱可以從統一建模語言(UML)的模型生成完整應用程序,有些則側重於消除多數冗餘的編碼任務。AndroMDA 屬於後一類。在應用程序中,我需要編寫大約 10 行代碼,所以可以說 AndroMDA 將爲我生成 95% 的代碼。

請參閱 參考資料 下載 AndroMDA。您將注意到 AndroMDA 採用 Maven(一個類似於 Ant 的開放源碼工具)管理安裝和一般性應用。AndroMDA 也可以和 Ant 一起使用,但是對於這個示例的目的,我建議採用 Maven。使用開放源碼工具可以保證每個人都能使用這個示例。





回頁首


用例

示例應用程序包含三個用例,如圖 1 所示:列出汽車(List Car)、添加汽車(Add Car)和刪除汽車(Remove Car)。所有這些用例的都標記爲 AndroMDA <<FrontEndUseCase>> 類型的 構造型(stereotype),這告訴工具這個用例與最終用戶相關,應當添加到用戶界面。<<FrontEndApplication>> 構造型告訴 AndroMDA 該用例必須在應用程序的第一頁上活動。


圖 1. 示例應用程序的用例圖
示例應用程序的用例圖




回頁首


活動圖

建立了用例之後,下一步是畫出每個用例的活動圖。活動圖 描述了每個用例內部發生的情況。重點是必須爲每個活動圖創建(並分配)一個控制器類。控制器類只是一個普通的類,它惟一的任務就是把來自 UI 的調用轉發到業務邏輯層(即,應用程序的服務)。

圖 2 是 List Cars 用例的活動圖。當用戶請求汽車列表時,應用程序得到數據庫中的所有汽車。圖中第一個狀態的 getAllCars() / defer 是對控制器類方法的引用。圖中的過渡把 Collection 傳遞給下一狀態,這將在應用程序界面上顯示數據。在第二個狀態之後,用戶可以選擇 Add Car 或 Remove Car,或者再次列出汽車。


圖 2. List Cars 用例的活動圖
List Cars 用例的活動圖

在圖 3 中可以看到 Add Car 用例的活動圖,它有點不同。在這個圖中,最有意思的部分是從 Enter New Car 到 Store New Car 的過渡。過渡有一個信號,叫做 addNewCar,它有三個參數。使用這個信息,AndroMDA 可以知道 Web 界面需要從用戶請求這些參數。在圖的最後一個狀態中,我用控制器類的 createCar() 方法把數據傳遞給應用程序的業務邏輯。


圖 3. Add Car 用例的活動圖
Add Car 用例的活動圖

第三個活動圖與第二個類似。請參閱 下載一節 下載並研究整個模型。





回頁首


類圖

類圖 記錄構成模型的所有類。在查看應用程序生成的文件時,可發現比類圖中看到的更多的類和文件。幸運的是,這類支持類和文件,只有開發特定平臺的 cartridge 的架構師和程序員才需要考慮(例如示例使用的 Spring 和 Hibernate 的 cartridge)。像 AndroMDA 這樣的工具提供了 cartridge,並負責從它們生成文件,所以您可以把精力集中在應用程序建模上。

在圖 4 所示的圖的底部,是 Car 類。它加上了 <<Entity>> 構造型的標記,這告訴 AndroMDA 它是一個 Hibernate 實體。使用 Hibernate cartridge 意味着不用擔心應用程序持久性的處理:它是自動生成的。Cars 類加上了 <<Service>> 構造型的標記。這意味着它是業務邏輯層的一部分,業務邏輯用實體向其他層和同一層的類提供服務。在圖的頂部是控制器。可以看到,應用程序需要三個控制器分別處理三個用例。


圖 4. 示例應用程序的類圖





回頁首


使用 AndroMDA

設計了應用程序模模型之後,就可以開始使用 AndroMDA 了。對於入門者來說,可以用它檢測模型是否有誤。只要進入項目的根目錄,並調用



如果環境設置正確,Maven 會從 Internet 下載必要的包,生成源代碼文件,並編譯好一切。如果模型有錯,那麼會得到消息。在第一次啓動 AndroMDA 之後,可以把調用變成



這樣會使用現有的包,但偶爾也會提示包已經過時。





回頁首


手工編碼

AndroMDA 生成了應用程序的許多文件,但是我仍然需要做些手工編碼。我需要手工編碼的四個文件如下:

/core/src/../CarsImpl.java
/web/src/../ListCarsControllerImpl.java
/web/src/../add/AddCarsControllerImpl.java
/web/src/../remove/RemoveCarsControllerImpl.java

在清單 1 中,我手工編碼到 CarsImpl.java 文件(它實現了 Services 類)中的行用 粗體 標記。


清單 1. 需要一些手工編碼 ...




可以看到,我並不需要很多手工編碼。清單 2 顯示了我寫入 ListCarsController.java 文件的 getAllCars() 方法體中的內容。


清單 2. getAllCars() 方法




下載示例,自行查看其餘的修改。

配置 JBoss

我需要對 JBoss 的配置稍做修改,以便它能與 Hibernate 一起工作。首先,要檢查是否啓用了服務器的 HSQLDB TCP 連接。然後,編輯 [JBOSS_HOME]/server/[SERVER_NAME]/deploy/hsqldb-ds.xml 並取消兩個元素的註釋,其中一個屬於連接:



另一個屬於 Mbean:







回頁首


部署應用程序

不管您是否相信,用 AndroMDA 構建應用程序就是這麼簡單!我要做的只是設計和建模應用程序,以及少量手工編碼,然後就基本可以了。在可以部署示例之前,我需要爲它創建數據庫。要跟上這部分,請確保桌面上正在運行 JBoss,環境設置也配置正確(即 JBOSS_HOME)。然後轉到自己項目的根目錄,並輸入:



現在,在自己項目的根目錄中輸入以下命令,就可以部署應用程序了:



假設一切正常,將得到一條 BUILD SUCCESSFUL 消息。

現在應當可以瀏覽 http://localhost:8080/cars,使用應用程序了。





回頁首


應用程序架構

到最後才討論應用程序架構看起來可能不合常規,但是對於這類開發來說這麼做是有意義的。因爲我使用 AndroMDA 和它的 cartridge 生成應用程序,所以在最後我應當看看整體效果。如果您還沒有這麼做,請 下載 示例項目並現在就研究它。

像應用程序本身一樣,架構也非常簡單。/core/target/ 目錄包含持久性和業務邏輯類。Car 實體類是 Hibernate 實體,Cars 服務類是一個無狀態會話 bean。所有必要的文件和接口都是生成的。UI 層可以在 /web/target/ 目錄中找到。應用程序的 Java 服務器頁面(JSP)和級聯樣式表(CSS)文件以及控制器類都在那裏。包含整個應用程序的文件位於 /app/target/。

圖 5 顯示了應用程序在 Web 瀏覽器中看起來的效果。


圖 5. 示例應用程序的主屏幕
示例應用程序的主屏幕

示例包 包含汽車管理應用程序的 UML 模型和實現類,所以只需要設置環境變量,並針對項目運行 AndroMDA,就可以看到它的工作方式。





回頁首


結束語

通過一個簡單的示例,我演示了使用 AndroMDA 構建典型的 Web 企業應用程序。Spring-Hibernate 應用程序的多數代碼是由 Spring 和 Hibernate 的 cartridge 基於我的模型生成的;我只手工編碼了幾行代碼,並且這些代碼也毫不困難。

顯然,應用程序越複雜,開發起來就越不簡單。包含成百上千個類的應用程序不會像這裏演示的程序那樣簡單。但另一方面,通過使用 AndroMDA 或類似的 MDA 工具,可以把這類程序極大地簡化。請參閱 參考資料,學習關於 MDA 和 AndroMDA 的更多內容。






回頁首


下載

描述 名字 大小 下載方法
Sample code wi-arch19source.zip 3 KB  FTP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章