- 相關推薦
開發(fā)完整J2EE解決方案的八個步驟
摘要:Java 2企業(yè)版本(The Java 2 Enterprise Edition,J2EE)平臺由4個主要的部分組成:規(guī)范,參考實現(xiàn),兼容性測試包和BluePrints程序。BluePrints描述了一個分布式組件體系的最佳練習和設計指導方針。這篇文章介紹了一個由八個步驟組成的J2EE開發(fā)方法論,該方法是基于Rational Unified Process和BluePrints應用例子的。通過這篇文章,你將可以更好地理解J2EE體系的許多重要主題,并且可以應用這些知識來擴展和修改這個簡單的方法論,從而解決各種特定的商業(yè)問題。
在商業(yè)領域,我們使用Java 2企業(yè)版本(J2EE)來解決商業(yè)問題,開發(fā)商業(yè)的軟件,或者為其它的商業(yè)項目提供聯(lián)系的服務。如果一個公司要使用多層的體系來建立一個電子商務的網(wǎng)站,在其整個開發(fā)周期中,通常都需要經理、體系構建人員、設計人員、編程人員、測試人員和數(shù)據(jù)庫專家參與進來。
為了讓不同的部分可以有效地工作,我們通常都需要一個軟件開發(fā)流程。一個經典的開發(fā)流程包括有瀑布模型、快速應用開發(fā)(RAD)和最終編程。在這篇文章中,我們將集中介紹一個流行的軟件設計流程--Rational Unified Process(RUP)。RUP提供了一個專門的方法來為不同的角色分配任務。它的目標是在一個可預計進度和預算內,確保我們生產出高質量的軟件以符合用戶的需要。
我使用RUP作J2EE開發(fā)有三個方面的原因。首先,RUP是以體系為中心的;在提交資源作全方位的開發(fā)之前,它首先開發(fā)出一個可執(zhí)行的體系原型。第二,RUP是迭代的而且是基于組件的。該體系的基本通常是包含有一個架構,它可以方便地通過迭代地增加組件,從而在不影響系統(tǒng)其它部分的基礎上,自定義和擴展一個系統(tǒng)的功能。第三。RUP使用一個工業(yè)標準的語言--UML,可以將系統(tǒng)的體系和組件以可視化的模型展示。RUP有4個不同的開發(fā)階段:初始(inception), 細化(elaboration), 構建(construction)和轉換(transition)。這篇文章將從一個技術的觀點來介紹J2EE開發(fā)的8個基本步驟,它是維持以體系為中心的。
1、需求分析
需求分析用來描述系統(tǒng)應該和不應該做什么,從而開發(fā)者和用戶可以創(chuàng)建一個初始化的商業(yè)聯(lián)系。你可以用商業(yè)的概念、該領域的術語、框圖或者其它方法將功能性的需求寫成文檔,而非功能性的需求,例如性能和事務,可以寫在附加的需求文檔中。你可以用文本或者HTML來創(chuàng)建高級別的UI模型,采取哪種方式,要看你在該項目中介入的深度。
圖一展示了一個典型的電子商務系統(tǒng)。viewOrder圖說明的是一個用戶通過web登錄至系統(tǒng),查看訂單的列表,并且可點擊進去查看每張訂單的細節(jié)。addLineItems說明的是用戶瀏覽產品目錄,選擇感興趣的產品,并且將它們加入到購買訂單中。
II、面向對象的分析
分析產生問題域模型:類、對象和交互。你的分析應該脫離任何的技術或者實現(xiàn)的細節(jié),而應該包含有一個理想的模型。對象分析可幫助你理解問題和獲得問題領域方面的知識。你必須維護一個純領域的模型,它不包含技術的細節(jié),這是由于商業(yè)流程的改變要比信息技術慢得多。
上面的兩步--需求分析和面向對象的分析并不是J2EE特有的,對于許多面向對象的方法論來說,都是很常見的。圖2展示了一個高級別的對象分析模型,它是一個寵物店的例子應用。它說明了我們由需求分析use cases中確定的主要概念。我們將這些概念模型化到對象中,并且確定它們的關系。
需求和對象分析的結果是J2EE體系開發(fā)的一個入門點。要開發(fā)一個體系,你可選擇一個垂直的部分--通常是一個關鍵的部分,例如是訂單領域的對象模型--來作對象設計、實現(xiàn)、測試和開發(fā)。(一個垂直的部分,是一個RUP概念,是系統(tǒng)的一小部分。開始點是use case的一個子集,如圖1所示,還有領域分析模型,如圖三所示。一個垂直部分的實現(xiàn)就會產生一個全功能的迷你系統(tǒng),包括所有層,例如用戶界面層的JavaServer Pages(JSPs),中層的商業(yè)對象,例如是Enterprise JavaBeans (EJBs)和后臺的數(shù)據(jù)庫)。你可以將由原型中得到的經驗應用到域對象中,并且將這些認識作為對象設計階段的一個設計指導方針。
III、體系規(guī)范
經過前面的兩個步驟,商業(yè)領域的問題和需求都應該清晰了,F(xiàn)在我們將集中討論技術策略和體系上。一個體系就是各部分一起定義整個系統(tǒng)的藍圖:結構,接口和通信技術。我們可進一步將一個體系劃分為企業(yè)和應用體系。
企業(yè)系統(tǒng)體系
企業(yè)系統(tǒng)體系覆蓋了硬件和軟件架構,網(wǎng)絡拓撲,開發(fā)、測試和生產環(huán)境等。這些都反映了一個企業(yè)的長線投資。在開發(fā)前,你需要評估現(xiàn)有的軟件和硬件架構,如果它不能完全支持J2EE的話,你可能會加入新的組件和升級你現(xiàn)有的系統(tǒng)。你需要徹底地評估硬件,包括有計算機,路由器、交換機和網(wǎng)絡拓撲,因為它們都會影響系統(tǒng)的性能和穩(wěn)定,圖4展示了一個多層的網(wǎng)絡拓撲。
圖4中的多層企業(yè)體系擁有以下主要的組件:
.Web瀏覽器客戶端,它可能處在客戶端公司的防火墻后面
.HTTP服務器,它通常處在DMZ區(qū)
.Web容器主機提供表現(xiàn)或者商業(yè)邏輯組件
.應用容器提供商業(yè)邏輯組件
.關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)和數(shù)據(jù)庫提供數(shù)據(jù)和數(shù)據(jù)邏輯
所使用的系統(tǒng)體系類型是根據(jù)你對安全、性能、可靠性的需求以及你公司的財政狀況而定的。要求很低時,你甚至可以使用一臺二手的計算機和一條電話線。在Internet上,有許多開放源代碼的操作系統(tǒng)、Web服務器、應用服務器和數(shù)據(jù)庫管理系統(tǒng)。這些系統(tǒng)的花費可能只有幾百美金,當然,維護起來可能要麻煩一點。
高端的客戶,例如許多華爾街的財政機構,它們需要的是一個支持安全、高吞吐量和可應付不可預計網(wǎng)絡通信的系統(tǒng)。在這種情況下,你通常就需要一個n層的體系,該體系帶有Web服務器和應用服務器,并且設置為群集而達到容錯的目的。
你還需要評估軟件架構,包括Web服務器,安全管理軟件,應用服務器,域名管理服務器,數(shù)據(jù)庫管理系統(tǒng)和第三方的軟件組件,如果你還沒有購買你的應用服務器,那么在評估過程中,選擇一個J2EE的生產商將是一個重要的部分。我要提醒你一點,不同廠家對J2EE的實現(xiàn)是有很大不同的,有一些僅支持舊的J2EE版本。此外,一些Web容器或者應用容器可能要比其它的快不少。除了實現(xiàn)J2EE規(guī)范外,許多的廠家還售賣J2EE體系的組件或者架構。選擇一個穩(wěn)定的J2EE廠家也是重要的,因為這樣可以得到長久的支持。你通?梢再徺I或者在系統(tǒng)體系級別開發(fā)的功能包括有:
事務處理
國際化和本地化
群集和對象分布
Session管理
應用性能測量和描述
消息
工作流管理
入口和個性化管理
層到層通信協(xié)議
安全和防火墻
應用體系
應用體系建立在企業(yè)系統(tǒng)體系之上,指的是一個特別的項目或者應用。在架構完成后,體系建立人員就會研究如何建立一個專門的應用。如果你的企業(yè)體系只是支持一個舊的J2EE版本,你可能就需要首先升級你的系統(tǒng)。如果由于預算或者時間關系而不能做升級,那么就必須在舊版本的技術限制下工作。重要的是,要建立企業(yè)級的可重用組件。最終的目標是要滿足客戶的需要。
一個體系建立者并不是一個設計者;體系和設計是兩件不同的事情。一個應用體系的范圍是系統(tǒng)的主要結構、它的體系設計模式以及你可以在上面增加組件的架構。體系主要是涉及實現(xiàn)的非功能性方面,而設計是和商業(yè)的use cases有關,use cases是指你應用來轉換域對象模型為一個技術對象模型的部分。應用體系是項目的結構,一個專門的應用。你通常在應用體系結構開發(fā)時要作出的決定包括有:
層間的功能劃分
模型域對象
以前的系統(tǒng)需要保存的東西
購買的軟件組件
需要建立的組件
如何集成第三方的組件
圖3中的訂單域對象解釋了你如何做到模型化域對象。對于當前的Java技術,你可以將域對象分布在幾個地方,包括有作為開發(fā)者管理的持續(xù)對象放在Web容器中,作為EJB放在應用服務器中,或者作為存儲過程放在RDBMS主機中。
在寵物店的設計圖中,我們將訂單對象設計為一個實體bean、一個細節(jié)的對象和一個數(shù)據(jù)訪問對象,如圖5和后面的圖6所示。當你看到這些時,你將會認識到其體系的重要性。你可以想一下為什么一個在分析模型的域對象被映射為這么多對象,以及如果改變該設計的話,將會發(fā)生什么事情。你也許已經聽到過EJB的好處,不過要注意的是不同廠家實現(xiàn)起來的性能是有區(qū)別的。當新技術到來時,在將其放在到一個系統(tǒng)之前,你需要做研究并且動手做一些測試。其實所謂體系的開發(fā),就是將設計和實現(xiàn)域對象模型的垂直塊轉換為設計其它許多域對象。
在J2EE出現(xiàn)的早期,一些面向對象的設計者嘗試將域對象映射到實體bean中,并且將它們在層間傳送。他們擁有非常好的UML框圖,不過得到的結果是一個慢的系統(tǒng),這是由于不必要的網(wǎng)絡通信造成的。由對象分析直接進入對象設計,而沒有一個體系的設計,沒有清楚地理解一個新技術,這樣通常都會導致一個項目失敗。
可交付的體系
由于J2EE體系是一個相對新的主題,因此一個可交付的J2EE體系并沒有很好地定義。在寵物店的例子應用中,是很難看出體系在哪里結束和設計在哪里開始。文檔由高級別的應用體系檢查、Model-View-Controller設計模式的討論和一個體系概覽開始。低級別的文檔就是源代碼。沒有UML框圖。Sun的J2EE企業(yè)體系認證的委派部分要求所有的可交付體系都用UML表示。不過,這里僅表示為一個類框圖、一個組件框圖和一些對象交互框圖,。這些對于一個真正的J2EE應用來說都是不足夠的。要開始的話,體系規(guī)范和流程至少需要以下的方面:
一份系統(tǒng)體系文檔,用來描述你現(xiàn)有的硬件、軟件、網(wǎng)絡拓撲和其它的組件。
一個應用體系文檔,用來描述應用的主要結構,包括所有對于體系有重要作用的組件、use case組件和以前的組件的一個邏輯視圖。
一個新組件設計指導方針,用來描述所有的設計方針和體系決定,解釋全部這些決定,并且說明如果選擇其它的選項會有什么可能的結果。這些方針應該包含所有重要的基本決定,以便進行新組件的設計時可遵從這些規(guī)定,以維持系統(tǒng)體系的完整性。
一個工作體系原型來評估新的技術;從開發(fā)和配置J2EE應用中獲取經驗;建立體系架構;通過測量性能、擴展性來預示所冒的風險;還有向客戶證明你的方法是可行的。
在你開發(fā)過幾個J2EE方案并且獲得更多的經驗后,原型將不再那么重要,這時一些UML框圖和一些設計方針就可能已經足夠了。
IV、對象設計
在體系規(guī)范的指導下,設計可在技術上擴展和適應分析的結果。分析階段時,域對象模型化應該和技術的細節(jié)無關,而對象設計時則是和技術因素密切相關的,包括在體系開發(fā)階段時,采用哪一類的平臺、語言和廠家。理論上,你不要修改商業(yè)對象,除非是為了維護它們基本的屬性和行為而必須這樣做。
在體系決議的指導下,一個詳細的設計說明應該提到所有類的規(guī)范,包括必要的實現(xiàn)屬性,它們詳細的接口和偽代碼或者操作的純文本描述。規(guī)范的詳細程度應該達到只要和模型框圖結合,就可得到所有必要的編程信息。在許多自動化的軟件生產流程中,你可以從面向對象的框圖中產生代碼的框架。要注意的是stub和skeleton通常是無需在框圖中展示出來的,因為它們對于設計者和編程者來說都是透明的。我在圖6中包含它們只是為了說明EJB的基本點。
在你完成詳細的對象設計后,你就完成了域對象的對象相關映射。這樣做的原因是,雖然面向對象的方法論在目前是比較先進的,不過最流行和持久的商店都是關系型的。此外,一個客戶的IT架構在許多方面都已經反映了現(xiàn)有的投資和商業(yè)RDBMS廠家的選擇。因此將域對象模型轉換為關系模型或者數(shù)據(jù)庫表是非常重要的。有很多容器管理的工具,不過它們不能代替一個好的關系數(shù)據(jù)庫設計。
V、實現(xiàn)
有了一個好的架構和細節(jié)設計,實現(xiàn)將是一個很清晰的任務。此外,由于我們在體系原型階段設計和實現(xiàn)了系統(tǒng)的一個垂直部分,因此在實現(xiàn)階段我們不會碰到很多麻煩事情。在許多公司中,開發(fā)者通常都是過早進入實現(xiàn)階段,特別是當經理在監(jiān)視他們的時候,因為對于他們,做其它的事情等于浪費公司的時間。
結果是,不再花時間來畫UML框圖,而是在代碼開發(fā)中測試想法,這要花數(shù)星期和幾個月的時間,在這種情形下,所有的體系決議和設計都是在代碼階段作出的,通常要在幾個月后才會發(fā)現(xiàn)開發(fā)已經進入了一個錯誤的方向。
VI、確認
確認包括有測試以驗證該系統(tǒng)符合設計并且滿足需求。在整個開發(fā)周期中,驗證發(fā)生在開發(fā)和安裝階段。單元測試、集成測試和用戶容忍度測試都是重要的主題
VII、組合和配置
組件裝配和方案配置在J2EE的開發(fā)中是特別重要的。開發(fā)和安裝的環(huán)境可能是完全不同的。如果EJB處在系統(tǒng)中,你需要使用廠家的專門工具來提出產生容器的類,上面我也提到過,Web或者應用組件的配置對于不同的廠家都是不一樣的。你還必須考慮要配置的系統(tǒng)是否擁有任何廠家指定的代碼實現(xiàn)。在一個可擴展的體系中,系統(tǒng)的結構應該是穩(wěn)定的,但是應該可以支持增加配置新的或者舊的組件,而無需影響整個系統(tǒng)。
VIII、運作和維護
在最后的階段,應用交付到用戶的手中,你必須為他們提供培訓、文檔和教育。用戶將會發(fā)現(xiàn)問題和可能會提出新的改進。你必須通過正確地修改管理過程來處理這些需求。你無需為了配置一個新的組件或者替換一個舊的組件而關閉一個正在工作的系統(tǒng)。
體系開發(fā)流程
我們必須做許多體系的決定,因此我們必須整理出一個體系開發(fā)的流程。對于一個企業(yè)來說,通常有許多應用項目,其中的一些甚至會跨越幾年,從而導致系統(tǒng)圍繞許多周期而變化。在你的領域中,許多同樣的項目中都會出現(xiàn)同樣的需求。你應該很容易地重新使用一個擴展的和可重用的體系,它們可能在上個項目周期或者其它的項目中。這樣會有一個對普遍架構的需求,可重用的軟件架構可為家族式的軟件應用提供一個普遍的架構。
如果這是你的首個J2EE項目,你的體系必須被原型化,進行測試、分析,然后再重復。BluePrint提供了許多好的設計指導方針和最佳的練習,寵物店的例子也是一個很好的參考體系。要很快地提出一個好的并且是高質量的解決方案的有效方法是使用和擴展BluePrint參考體系,然后插入到你自己的商業(yè)組件中。
使用參考體系
就我的理解來說,寵物店體系的本質是Model-View-Controller和Command模型。你可以將這些模型應用到以Web-centric和EJB-centric的系統(tǒng)。對于每個域對象,一個視圖是用嵌套的JSP表現(xiàn)。一個controller處理與商業(yè)相關的事件,而域對象封裝商業(yè)邏輯、事務和安全。我們使用前臺的servlet作為中央的controller,以接收和解釋所有用戶的操作。它分派商業(yè)事件到指定的域對象controllers,這些controllers可調用域對象來改變持續(xù)的狀態(tài)。根據(jù)這個事件處理的結果,一個controller選擇下一個顯示的視圖。以下的組件對于體系都是很重要的,我們可以修改并且應用在大部分的J2EE應用:
MainServlet: 前臺的組件是Web容器和該架構之間的接口
ModelUpdateListener: 是獲取模型更新事件的對象的接口
ModelUpdateNotifier:在更新模型事件發(fā)生的時候通知監(jiān)聽者
RequestProcessor: 處理由MainServlet接收的全部請求
RequestHandler:plug-n-play請求處理器組件的接口
RequestHandlerMapping:包含有請求處理器映射規(guī)則
RequestToEventTranslator:根據(jù)請求處理器的映射規(guī)則,中央請求處理器委派請求處理到plug-n-play請求處理組件。到商業(yè)事件的透明http請求
EStoreEvent: 商業(yè)事件
ShoppingClientControllerWebImpl: Proxy-to-EJB層前臺控制器
ScreenflowManager: 控制屏幕流,選擇視圖
ModelUpdateManager: EJB層模型更新管理器,通報由于一個事件而導致的模型修改
ShoppingClientControllerEJB: EJB層前臺,為EJB客戶提供遠程服務
StateMachine:中央事件處理器,根據(jù)狀態(tài)處理器的映射規(guī)則,委派事件處理至plug-n-play處理器組件
StateHandler: EJB層狀態(tài)處理器接口
StateHandlerMapping: 包含狀態(tài)處理器映射規(guī)則
擴展參考體系
BluePrint的例子應用是一個好的起點,你還應該修改它以配合不同的項目和領域。設計模型是可重用的微體系,你可以使用它來擴展參考體系。BluePrint提供了一個非常有用的J2EE模型目錄,而23個“Gang of Four”模型都是極好的資源。例如,如果你想擴展參考體系以支持工作流管理,你可以在配置或者運行時使用中央controller來動態(tài)注冊事件處理器。中央controller要求每個注冊的事件處理器處理一個事件,直到一個處理器返回一個指示已經到達命令串末尾的信息。
插入你的商業(yè)組件
J2EE技術對于每個人都是一樣的,但是對于不同的領域,我們需要解決的問題都是不同的。一旦你建立了一個基本的J2EE框架,你就必須利用一些use cases來展示該體系可為你的領域工作。你可以通過選擇一些情形,最好是該系統(tǒng)的一個重要的功能,或者使用得最多的而且可帶來明顯的技術上的冒險的情形。由域分析模型開始,然后嘗試映射你的域對象到高端和低端的設計模型,就象我們在圖5和6中的所示。實現(xiàn)低級別的設計模型,并且測試看它是否真正地運作。如果所有都如設想般運作,你就可以再重復上一步,即找冒險的情形、更多的設想來測試以擴展體系的覆蓋。在經過反復的驗證后,初始化的體系原型應該就會變得穩(wěn)定。你可以認識到哪些組件是可以購買的,舊系統(tǒng)的哪些方面是應該保留的,以及如何為它們做接口。下一步就是軟件設計,你可以使用設計指南中指定的類似方法和流程來進行繼續(xù)的開發(fā)。
按部就班
我們使用了一個流程的形式,將一個復雜的問題分解為幾個小的部分,以便我們能更容易地理解和解決它們。在這篇文章中,我們將J2EE的開發(fā)分解為8個步驟,集中介紹了體系和設計。我這里介紹了重要的體系主題和作出體系決定的一個流程。我還討論了J2EE體系的角色和可交付。
學習通過這些步驟來開發(fā)J2EE的方案就象學習舞蹈一樣。你首先需要自覺和堅持不懈地練習基本的舞步。一旦你熟悉了它們,你就會想到將它們放在一起,并且更集中在曲子里每步的大小、速度、流和節(jié)奏。不過你不應該被一個流程來限制你的創(chuàng)造力。相反,你應該使用和擴展該流程來滿足你的特定需要。要記住,你的最終目標是設計出一個完整的J2EE方案來滿足你的客戶需求。
【開發(fā)完整J2EE解決方案的八個步驟】相關文章:
J2EE項目開發(fā)風險匯總03-10
中餐服務十八個步驟01-22
Eclipse j2ee開發(fā)環(huán)境的搭建12-26
j2ee入門到精通學習步驟03-18
Java Web開發(fā)和J2EE的區(qū)別03-29
J2EE開發(fā)使用手冊目錄03-20
J2EE軟件開發(fā)過程03-08
沖泡大紅袍的八個步驟06-27
紫砂壺泡茶的八個步驟04-19