| 開(kāi)發(fā)J2EE解決方案的八個(gè)步驟(1) |
| 作者:天絡(luò )科技 發(fā)文時(shí)間:2004.03.26 |
![]() |
| 摘要 Java 2企業(yè)版本(The Java 2 Enterprise Edition,J2EE)平臺由4個(gè)主要的部分組成:規范,參考實(shí)現,兼容性測試包和BluePrints程序。BluePrints描述了一個(gè)分布式組件體系的最佳練習和設計指導方針。這篇文章介紹了一個(gè)由八個(gè)步驟組成的J2EE開(kāi)發(fā)方法論,該方法是基于Rational Unified Process和BluePrints應用例子的。通過(guò)這篇文章,你將可以更好地理解J2EE體系的許多重要主題,并且可以應用這些知識來(lái)擴展和修改這個(gè)簡(jiǎn)單的方法論,從而解決各種特定的商業(yè)問(wèn)題。 在商業(yè)領(lǐng)域,我們使用Java 2企業(yè)版本(J2EE)來(lái)解決商業(yè)問(wèn)題,開(kāi)發(fā)商業(yè)的軟件,或者為其它的商業(yè)項目提供聯(lián)系的服務(wù)。如果一個(gè)公司要使用多層的體系來(lái)建立一個(gè)電子商務(wù)的網(wǎng)站,在其整個(gè)開(kāi)發(fā)周期中,通常都需要經(jīng)理、體系構建人員、設計人員、編程人員、測試人員和數據庫專(zhuān)家參與進(jìn)來(lái)。 為了讓不同的部分可以有效地工作,我們通常都需要一個(gè)軟件開(kāi)發(fā)流程。一個(gè)經(jīng)典的開(kāi)發(fā)流程包括有瀑布模型、快速應用開(kāi)發(fā)(RAD)和最終編程。在這篇文章中,我們將集中介紹一個(gè)流行的軟件設計流程--Rational Unified Process(RUP)。RUP提供了一個(gè)專(zhuān)門(mén)的方法來(lái)為不同的角色分配任務(wù)。它的目標是在一個(gè)可預計進(jìn)度和預算內,確保我們生產(chǎn)出高質(zhì)量的軟件以符合用戶(hù)的需要。 我使用RUP作J2EE開(kāi)發(fā)有三個(gè)方面的原因。首先,RUP是以體系為中心的;在提交資源作全方位的開(kāi)發(fā)之前,它首先開(kāi)發(fā)出一個(gè)可執行的體系原型。第二,RUP是迭代的而且是基于組件的。該體系的基本通常是包含有一個(gè)架構,它可以方便地通過(guò)迭代地增加組件,從而在不影響系統其它部分的基礎上,自定義和擴展一個(gè)系統的功能。第三。RUP使用一個(gè)工業(yè)標準的語(yǔ)言--UML,可以將系統的體系和組件以可視化的模型展示。RUP有4個(gè)不同的開(kāi)發(fā)階段:初始(inception), 細化(elaboration), 構建(construction)和轉換(transition)。這篇文章將從一個(gè)技術(shù)的觀(guān)點(diǎn)來(lái)介紹J2EE開(kāi)發(fā)的8個(gè)基本步驟,它是維持以體系為中心的。 1、需求分析 需求分析用來(lái)描述系統應該和不應該做什么,從而開(kāi)發(fā)者和用戶(hù)可以創(chuàng )建一個(gè)初始化的商業(yè)聯(lián)系。你可以用商業(yè)的概念、該領(lǐng)域的術(shù)語(yǔ)、框圖或者其它方法將功能性的需求寫(xiě)成文檔,而非功能性的需求,例如性能和事務(wù),可以寫(xiě)在附加的需求文檔中。你可以用文本或者HTML來(lái)創(chuàng )建高級別的UI模型,采取哪種方式,要看你在該項目中介入的深度。 圖一展示了一個(gè)典型的電子商務(wù)系統。viewOrder圖說(shuō)明的是一個(gè)用戶(hù)通過(guò)web登錄至系統,查看訂單的列表,并且可點(diǎn)擊進(jìn)去查看每張訂單的細節。addLineItems說(shuō)明的是用戶(hù)瀏覽產(chǎn)品目錄,選擇感興趣的產(chǎn)品,并且將它們加入到購買(mǎi)訂單中。 ![]() II、面向對象的分析 分析產(chǎn)生問(wèn)題域模型:類(lèi)、對象和交互。你的分析應該脫離任何的技術(shù)或者實(shí)現的細節,而應該包含有一個(gè)理想的模型。對象分析可幫助你理解問(wèn)題和獲得問(wèn)題領(lǐng)域方面的知識。你必須維護一個(gè)純領(lǐng)域的模型,它不包含技術(shù)的細節,這是由于商業(yè)流程的改變要比信息技術(shù)慢得多。 上面的兩步--需求分析和面向對象的分析并不是J2EE特有的,對于許多面向對象的方法論來(lái)說(shuō),都是很常見(jiàn)的。圖2展示了一個(gè)高級別的對象分析模型,它是一個(gè)寵物店的例子應用。它說(shuō)明了我們由需求分析use cases中確定的主要概念。我們將這些概念模型化到對象中,并且確定它們的關(guān)系。 ![]() 需求和對象分析的結果是J2EE體系開(kāi)發(fā)的一個(gè)入門(mén)點(diǎn)。要開(kāi)發(fā)一個(gè)體系,你可選擇一個(gè)垂直的部分--通常是一個(gè)關(guān)鍵的部分,例如是訂單領(lǐng)域的對象模型--來(lái)作對象設計、實(shí)現、測試和開(kāi)發(fā)。(一個(gè)垂直的部分,是一個(gè)RUP概念,是系統的一小部分。開(kāi)始點(diǎn)是use case的一個(gè)子集,如圖1所示,還有領(lǐng)域分析模型,如圖三所示。一個(gè)垂直部分的實(shí)現就會(huì )產(chǎn)生一個(gè)全功能的迷你系統,包括所有層,例如用戶(hù)界面層的JavaServer Pages(JSPs),中層的商業(yè)對象,例如是Enterprise JavaBeans (EJBs)和后臺的數據庫)。你可以將由原型中得到的經(jīng)驗應用到域對象中,并且將這些認識作為對象設計階段的一個(gè)設計指導方針。 ![]() III、體系規范 經(jīng)過(guò)前面的兩個(gè)步驟,商業(yè)領(lǐng)域的問(wèn)題和需求都應該清晰了?,F在我們將集中討論技術(shù)策略和體系上。一個(gè)體系就是各部分一起定義整個(gè)系統的藍圖:結構,接口和通信技術(shù)。我們可進(jìn)一步將一個(gè)體系劃分為企業(yè)和應用體系。 企業(yè)系統體系 企業(yè)系統體系覆蓋了硬件和軟件架構,網(wǎng)絡(luò )拓撲,開(kāi)發(fā)、測試和生產(chǎn)環(huán)境等。這些都反映了一個(gè)企業(yè)的長(cháng)線(xiàn)投資。在開(kāi)發(fā)前,你需要評估現有的軟件和硬件架構,如果它不能完全支持J2EE的話(huà),你可能會(huì )加入新的組件和升級你現有的系統。你需要徹底地評估硬件,包括有計算機,路由器、交換機和網(wǎng)絡(luò )拓撲,因為它們都會(huì )影響系統的性能和穩定,圖4展示了一個(gè)多層的網(wǎng)絡(luò )拓撲。 ![]() 圖4中的多層企業(yè)體系擁有以下主要的組件: .Web瀏覽器客戶(hù)端,它可能處在客戶(hù)端公司的防火墻后面 .HTTP服務(wù)器,它通常處在DMZ區 .Web容器主機提供表現或者商業(yè)邏輯組件 .應用容器提供商業(yè)邏輯組件 .關(guān)系數據庫管理系統(RDBMS)和數據庫提供數據和數據邏輯 所使用的系統體系類(lèi)型是根據你對安全、性能、可靠性的需求以及你公司的財政狀況而定的。要求很低時(shí),你甚至可以使用一臺二手的計算機和一條電話(huà)線(xiàn)。在Internet上,有許多開(kāi)放源代碼的操作系統、Web服務(wù)器、應用服務(wù)器和數據庫管理系統。這些系統的花費可能只有幾百美金,當然,維護起來(lái)可能要麻煩一點(diǎn)。 高端的客戶(hù),例如許多華爾街的財政機構,它們需要的是一個(gè)支持安全、高吞吐量和可應付不可預計網(wǎng)絡(luò )通信的系統。在這種情況下,你通常就需要一個(gè)n層的體系,該體系帶有Web服務(wù)器和應用服務(wù)器,并且設置為群集而達到容錯的目的。 你還需要評估軟件架構,包括Web服務(wù)器,安全管理軟件,應用服務(wù)器,域名管理服務(wù)器,數據庫管理系統和第三方的軟件組件,如果你還沒(méi)有購買(mǎi)你的應用服務(wù)器,那么在評估過(guò)程中,選擇一個(gè)J2EE的生產(chǎn)商將是一個(gè)重要的部分。我要提醒你一點(diǎn),不同廠(chǎng)家對J2EE的實(shí)現是有很大不同的,有一些僅支持舊的J2EE版本。此外,一些Web容器或者應用容器可能要比其它的快不少。除了實(shí)現J2EE規范外,許多的廠(chǎng)家還售賣(mài)J2EE體系的組件或者架構。選擇一個(gè)穩定的J2EE廠(chǎng)家也是重要的,因為這樣可以得到長(cháng)久的支持。你通??梢再徺I(mǎi)或者在系統體系級別開(kāi)發(fā)的功能包括有: 。事務(wù)處理 。國際化和本地化 。群集和對象分布 。Session管理 。應用性能測量和描述 。消息 。工作流管理 。入口和個(gè)性化管理 。層到層通信協(xié)議 。安全和防火墻 應用體系 應用體系建立在企業(yè)系統體系之上,指的是一個(gè)特別的項目或者應用。在架構完成后,體系建立人員就會(huì )研究如何建立一個(gè)專(zhuān)門(mén)的應用。如果你的企業(yè)體系只是支持一個(gè)舊的J2EE版本,你可能就需要首先升級你的系統。如果由于預算或者時(shí)間關(guān)系而不能做升級,那么就必須在舊版本的技術(shù)限制下工作。重要的是,要建立企業(yè)級的可重用組件。最終的目標是要滿(mǎn)足客戶(hù)的需要。 一個(gè)體系建立者并不是一個(gè)設計者;體系和設計是兩件不同的事情。一個(gè)應用體系的范圍是系統的主要結構、它的體系設計模式以及你可以在上面增加組件的架構。體系主要是涉及實(shí)現的非功能性方面,而設計是和商業(yè)的use cases有關(guān),use cases是指你應用來(lái)轉換域對象模型為一個(gè)技術(shù)對象模型的部分。應用體系是項目的結構,一個(gè)專(zhuān)門(mén)的應用。你通常在應用體系結構開(kāi)發(fā)時(shí)要作出的決定包括有: 。層間的功能劃分 。模型域對象 。以前的系統需要保存的東西 。購買(mǎi)的軟件組件 。需要建立的組件 。如何集成第三方的組件 圖3中的訂單域對象解釋了你如何做到模型化域對象。對于當前的Java技術(shù),你可以將域對象分布在幾個(gè)地方,包括有作為開(kāi)發(fā)者管理的持續對象放在Web容器中,作為EJB放在應用服務(wù)器中,或者作為存儲過(guò)程放在RDBMS主機中。 在寵物店的設計圖中,我們將訂單對象設計為一個(gè)實(shí)體bean、一個(gè)細節的對象和一個(gè)數據訪(fǎng)問(wèn)對象,如圖5和后面的圖6所示。當你看到這些時(shí),你將會(huì )認識到其體系的重要性。你可以想一下為什么一個(gè)在分析模型的域對象被映射為這么多對象,以及如果改變該設計的話(huà),將會(huì )發(fā)生什么事情。你也許已經(jīng)聽(tīng)到過(guò)EJB的好處,不過(guò)要注意的是不同廠(chǎng)家實(shí)現起來(lái)的性能是有區別的。當新技術(shù)到來(lái)時(shí),在將其放在到一個(gè)系統之前,你需要做研究并且動(dòng)手做一些測試。其實(shí)所謂體系的開(kāi)發(fā),就是將設計和實(shí)現域對象模型的垂直塊轉換為設計其它許多域對象。 ![]() 在J2EE出現的早期,一些面向對象的設計者嘗試將域對象映射到實(shí)體bean中,并且將它們在層間傳送。他們擁有非常好的UML框圖,不過(guò)得到的結果是一個(gè)慢的系統,這是由于不必要的網(wǎng)絡(luò )通信造成的。由對象分析直接進(jìn)入對象設計,而沒(méi)有一個(gè)體系的設計,沒(méi)有清楚地理解一個(gè)新技術(shù),這樣通常都會(huì )導致一個(gè)項目失敗。 可交付的體系 由于J2EE體系是一個(gè)相對新的主題,因此一個(gè)可交付的J2EE體系并沒(méi)有很好地定義。在寵物店的例子應用中,是很難看出體系在哪里結束和設計在哪里開(kāi)始。文檔由高級別的應用體系檢查、Model-View-Controller設計模式的討論和一個(gè)體系概覽開(kāi)始。低級別的文檔就是源代碼。沒(méi)有UML框圖。Sun的J2EE企業(yè)體系認證的委派部分要求所有的可交付體系都用UML表示。不過(guò),這里僅表示為一個(gè)類(lèi)框圖、一個(gè)組件框圖和一些對象交互框圖,。這些對于一個(gè)真正的J2EE應用來(lái)說(shuō)都是不足夠的。要開(kāi)始的話(huà),體系規范和流程至少需要以下的方面: .一份系統體系文檔,用來(lái)描述你現有的硬件、軟件、網(wǎng)絡(luò )拓撲和其它的組件 .一個(gè)應用體系文檔,用來(lái)描述應用的主要結構,包括所有對于體系有重要作用的組件、use case組件和以前的組件的一個(gè)邏輯視圖 .一個(gè)新組件設計指導方針,用來(lái)描述所有的設計方針和體系決定,解釋全部這些決定,并且說(shuō)明如果選擇其它的選項會(huì )有什么可能的結果。這些方針應該包含所有重要的基本決定,以便進(jìn)行新組件的設計時(shí)可遵從這些規定,以維持系統體系的完整性 。一個(gè)工作體系原型來(lái)評估新的技術(shù);從開(kāi)發(fā)和配置J2EE應用中獲取經(jīng)驗;建立體系架構;通過(guò)測量性能、擴展性來(lái)預示所冒的風(fēng)險;還有向客戶(hù)證明你的方法是可行的 在你開(kāi)發(fā)過(guò)幾個(gè)J2EE方案并且獲得更多的經(jīng)驗后,原型將不再那么重要,這時(shí)一些UML框圖和一些設計方針就可能已經(jīng)足夠了。 |
聯(lián)系客服