轉(zhuǎn):用Rational Rose和UML開(kāi)發(fā)J2EE應(yīng)用(二)
Posted on 2007-09-13 11:41 紅子 閱讀(446) 評(píng)論(0) 編輯 收藏 所屬分類: UML學(xué)習(xí) 、JAVA 、J2EE 綜合用Rational Rose和UML開(kāi)發(fā)J2EE應(yīng)用(二)
實(shí)現(xiàn)軟件
雖然分析模型可以幫助你解決問(wèn)題提供了一個(gè)基礎(chǔ),不過(guò)離實(shí)現(xiàn)還是很遠(yuǎn)。在設(shè)計(jì)期間,你必須考慮到所采用的技術(shù)帶來(lái)的額外限制和需求,并且嘗試映射解決方案到最優(yōu)化的實(shí)現(xiàn)。
在我們的例子中,假設(shè)我們正在建立一個(gè)基于Web的應(yīng)用。實(shí)現(xiàn)這樣一個(gè)應(yīng)用需要一個(gè)深思熟慮的方法。分析模型的作用是作為一個(gè)出發(fā)點(diǎn),用來(lái)決定將不同的J2EE技術(shù)映射到方案。例如,<<control>> 類可很好地映射到Java Servlets或者Enterprise JavaBean (EJB) Session Beans。這個(gè)方法可以將J2EE層的實(shí)現(xiàn)模型和Sun的"Model 2"參考體系對(duì)應(yīng)起來(lái)。
Rational Rose提供了一個(gè)簡(jiǎn)化的接口來(lái)開(kāi)發(fā)servlets和EJB Session Beans。圖5顯示了創(chuàng)建一個(gè)servlet的對(duì)話框。

****圖5 Servlet定義窗口*****
雖然EJB包含有多個(gè)接口和類,Rational Rose還是提供了創(chuàng)建EJB的便利接口。創(chuàng)建EJB的對(duì)話框如圖6所示。在這里,對(duì)話框顯示了需要?jiǎng)?chuàng)建一個(gè)無(wú)狀態(tài)Session Bean的設(shè)置。

****圖6****
創(chuàng)建一個(gè)無(wú)狀態(tài)Session Bean
得到的Session EJB如圖7所示。這是基于為EJB開(kāi)發(fā)的UML模型,它是以Sun Java Community Process在JSR-26開(kāi)發(fā)的。它顯示了構(gòu)成EJB的各種元素之間的關(guān)系,特別是home和remote接口和EJB實(shí)現(xiàn)類。由于EJB并不真正實(shí)現(xiàn)home和remote接口(它們是通過(guò)配置工具自動(dòng)產(chǎn)生的對(duì)象實(shí)現(xiàn)的),因此關(guān)系并不是實(shí)現(xiàn)home和remote接口而是分別產(chǎn)生<<EJBRealizeHome>>和<<EJBRealizeRemote>>。home和remote接口的依賴關(guān)系表明home接口實(shí)例化remote接口。

************圖7**********
一個(gè)無(wú)狀態(tài)Session Bean
<<boundary>>類粗略地映射到JSP、HTML和form,如果你正在開(kāi)發(fā)一個(gè)傳統(tǒng)的基于客戶的應(yīng)用,它映射到一個(gè)客戶應(yīng)用的對(duì)話框。我們使用JSP作為呈現(xiàn)實(shí)體和系統(tǒng)交互的的一個(gè)手段。JSP實(shí)際上由兩個(gè)方面,也就是客戶端的表現(xiàn)和服務(wù)器端的行為,所以它的模型包含有一個(gè)客戶端頁(yè)面和服務(wù)器端的頁(yè)面,它們之間的關(guān)系是<<build>> 。一個(gè)例子如圖8所示。

***********圖8***********
JSP作為服務(wù)器端和客戶端頁(yè)面
創(chuàng)建一個(gè)JSP比EJB還簡(jiǎn)單,你只需要在browser的菜單中選擇Web Modeler>New>Server Page就可以了,如圖9所示。

*************圖9***********
在Rational Rose中創(chuàng)建一個(gè)JavaServer Page
諸如Catalog, Order和Customer的<<entity>> 類可映射為Entity Bean。它們的創(chuàng)建如上面圖6所示。
J2EE應(yīng)用中常利用的一個(gè)技術(shù)是使用JavaBean在servlets和JSPs之間傳送信息。在Rational Rose中要做到這一點(diǎn)是很簡(jiǎn)單的,通過(guò)在一個(gè)Java類上創(chuàng)建attributes,并且通過(guò)如圖10中的attribute規(guī)范對(duì)話框來(lái)將attribute設(shè)置為屬性。

*************圖10***********
將一個(gè)attribute設(shè)置為屬性
在整體實(shí)現(xiàn)模型中,創(chuàng)建JSPs, servlets, JavaBeans和EJBs是非常有用的。Rational Rose可讓你很容易地模型化關(guān)系和告訴工程師其中的基本細(xì)節(jié),不僅包括JSPs, servlets, EJBs和JavaBeans,還包括實(shí)現(xiàn)中涉及到的HTML頁(yè)面和Form。這些可以送給表現(xiàn)層開(kāi)發(fā)者作進(jìn)一步的處理,同時(shí)可與你的應(yīng)用邏輯保持兼容性。
圖11是某個(gè)類框圖的一部分,它顯示了實(shí)現(xiàn)在線CD商店中涉及到的不同技術(shù)。該框圖展示了各個(gè)類以及它們?nèi)绾闻c表現(xiàn)、商業(yè)邏輯和數(shù)據(jù)層排列在一起。這樣,客戶端的頁(yè)面在左邊,控制的servlet在中間,Entity Beans在右邊。

*************圖11**************
在線CD商店的部分實(shí)現(xiàn)模型
該框圖只顯示了付費(fèi)和瀏覽CD細(xì)節(jié)用例中需要用到一些類。我們可以通過(guò)一個(gè)簡(jiǎn)單的付費(fèi)情景來(lái)嘗試“閱讀”該框圖。假定你已經(jīng)瀏覽完畢,并且選擇了一些準(zhǔn)備購(gòu)買的CD,你在主頁(yè)(左邊的頂部)上選擇“checkout”的選項(xiàng)。這樣將會(huì)調(diào)用經(jīng)由相關(guān)stereotyped <<link>>顯示的MainSerlet控制器。MainServlet由Order EJB中得到訂單的細(xì)節(jié),構(gòu)造一個(gè)Order JavaBean,并且將它設(shè)置為session的一個(gè)屬性,并且將請(qǐng)求向前送,如<<forward>>標(biāo)識(shí)的一樣,直到一個(gè)Checkout JSP。Checkout JSP使用Order JavaBean,如JSP和Order JavaBean之間所示的<<Use Bean>>關(guān)系一樣,它會(huì)構(gòu)造Checkout_Client頁(yè)面并且呈現(xiàn)給用戶。
很明顯,我們忽視了其中的一些細(xì)節(jié)。例如,在實(shí)際的項(xiàng)目中,你可能將使用購(gòu)物車來(lái)跟蹤項(xiàng)目;控制的責(zé)任或許會(huì)更分散,而不只是用唯一一個(gè)MainServlet等。這里的主要觀點(diǎn)是告訴你,對(duì)于設(shè)計(jì)和開(kāi)發(fā)復(fù)雜的J2EE應(yīng)用,UML是一個(gè)強(qiáng)大的工具,通過(guò)上面的例子,你將會(huì)認(rèn)識(shí)到這一點(diǎn)。
實(shí)現(xiàn)工作
Rational Rose可讓你直接從框圖中產(chǎn)生, JavaBean, HTML, Servlet和EJB代碼。例如,兩個(gè)JSP間的<<include>>關(guān)系將會(huì)在導(dǎo)致在相應(yīng)的JSP中產(chǎn)生<%@ include file="header.jsp" %> 。同樣,<<Use Bean>>將會(huì)在JSP中產(chǎn)生<jsp:useBean id="cd" class="com.rational.cdshop.util.CD" scope="session">,這樣就可使用CD JavaBean。
在EJB方面,除了可為EJB2.0中的全部三種EJB產(chǎn)生代碼外(以及符合EJB1.1的EJB),Rational Rose還提供了一些特性以簡(jiǎn)化EJB的開(kāi)發(fā)。例如,在開(kāi)發(fā)EJB時(shí),其中一個(gè)較麻煩的是需要在接口和實(shí)現(xiàn)類中寫(xiě)方法的代碼。Rational Rose提供了一個(gè)菜單的選項(xiàng),你只需要按一下按鈕就解決了。它還提供了一個(gè)"check and repair"菜單選項(xiàng),可以驗(yàn)證定義的EJB的合法性(例如,remote接口中的remote方法和EJB實(shí)現(xiàn)類中的是對(duì)應(yīng)的),如果不是,可以為你修復(fù)它們。
Rational Rose中另一個(gè)和EJB相關(guān)的特性是Rational Quality Architect (RQA),可用作設(shè)計(jì)測(cè)試EJB。例如,可以使用RQA為EJB作單元測(cè)試。還可以使用在Rose中定義的順序圖來(lái)作多個(gè)EJB的測(cè)試。當(dāng)依賴某個(gè)軟件組件,但是它還未設(shè)計(jì)好,那么可以使用RQA來(lái)產(chǎn)生框架。
為了確保可以用自己的條件來(lái)實(shí)現(xiàn),而無(wú)需擔(dān)心UML模型的改變,反之亦然,Rational Rose提供了一個(gè)內(nèi)置的代碼編輯器,用戶可以設(shè)置同步的選項(xiàng)。例如,你可以選擇一直保持同步。在這種情況下,每當(dāng)你更新源代碼并且保存時(shí),Rose中的UML模型就會(huì)自動(dòng)被更新。有些時(shí)候,你可以只是想看一下它們是如何處理的,并不想影響你的模型。在這種情況下,你可以在全局或者基于每個(gè)類的設(shè)置將同步關(guān)掉。
當(dāng)然,當(dāng)談到實(shí)現(xiàn)和編碼時(shí),你將需要一個(gè)好的IDE,例如Sun's Forte for Java或者Borland JBuilder。Rational Rose 2001a提供的主流IDE的深度集成和自動(dòng)同步,所以可以在享受Rational Rose在UML模型和開(kāi)發(fā)J2EE應(yīng)用好處的同時(shí),繼續(xù)使用自己最喜愛(ài)的IDE。
關(guān)于UML和J2EE的更多方面
我們只是很簡(jiǎn)略地談了一下使用UML作模型及開(kāi)發(fā)J2EE應(yīng)用。例如,通過(guò)session中涉及到的各種實(shí)體,你可以使用UML活動(dòng)圖來(lái)模型化session管理。
另一個(gè)挑戰(zhàn)是傳達(dá)session EJB需要的正確操作調(diào)用順序。一個(gè)順序圖可以標(biāo)識(shí)某個(gè)情景,但是你需要大量的順序圖來(lái)表示組件支持的各種情景(有些人嘗試使用帶有控制和分支語(yǔ)句的順序圖,但是這樣只會(huì)得到一個(gè)復(fù)雜和費(fèi)解的順序圖)。另一方面,UML狀態(tài)圖提供了一個(gè)強(qiáng)大的功能,可以模型化和傳達(dá)這些信息。通過(guò)狀態(tài)圖,你可以查看順序圖的每個(gè)情景,這樣你就可以驗(yàn)證每個(gè)順序圖,并且看組件是否支持你需要用的操作。
總結(jié)
通過(guò)使用UML,你可以理解需求,作正確的分析和設(shè)計(jì),并且在一個(gè)經(jīng)過(guò)驗(yàn)證的規(guī)則上開(kāi)發(fā)一個(gè)方案和作最佳的實(shí)現(xiàn),從而可以明顯的提升開(kāi)發(fā)可擴(kuò)展、易維護(hù)和可長(zhǎng)時(shí)間使用的軟件的機(jī)會(huì)。
Rational Rose是僅有的可以支持全程建模及J2EE應(yīng)用設(shè)計(jì)的UML模型工具。