- 相關(guān)推薦
開(kāi)發(fā)完整J2EE解決方案的八個(gè)步驟
摘要: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)足夠了。
IV、對象設計
在體系規范的指導下,設計可在技術(shù)上擴展和適應分析的結果。分析階段時(shí),域對象模型化應該和技術(shù)的細節無(wú)關(guān),而對象設計時(shí)則是和技術(shù)因素密切相關(guān)的,包括在體系開(kāi)發(fā)階段時(shí),采用哪一類(lèi)的平臺、語(yǔ)言和廠(chǎng)家。理論上,你不要修改商業(yè)對象,除非是為了維護它們基本的屬性和行為而必須這樣做。
在體系決議的指導下,一個(gè)詳細的設計說(shuō)明應該提到所有類(lèi)的規范,包括必要的實(shí)現屬性,它們詳細的接口和偽代碼或者操作的純文本描述。規范的詳細程度應該達到只要和模型框圖結合,就可得到所有必要的編程信息。在許多自動(dòng)化的軟件生產(chǎn)流程中,你可以從面向對象的框圖中產(chǎn)生代碼的框架。要注意的是stub和skeleton通常是無(wú)需在框圖中展示出來(lái)的,因為它們對于設計者和編程者來(lái)說(shuō)都是透明的。我在圖6中包含它們只是為了說(shuō)明EJB的基本點(diǎn)。
在你完成詳細的對象設計后,你就完成了域對象的對象相關(guān)映射。這樣做的原因是,雖然面向對象的方法論在目前是比較先進(jìn)的,不過(guò)最流行和持久的商店都是關(guān)系型的。此外,一個(gè)客戶(hù)的IT架構在許多方面都已經(jīng)反映了現有的投資和商業(yè)RDBMS廠(chǎng)家的選擇。因此將域對象模型轉換為關(guān)系模型或者數據庫表是非常重要的。有很多容器管理的工具,不過(guò)它們不能代替一個(gè)好的關(guān)系數據庫設計。
V、實(shí)現
有了一個(gè)好的架構和細節設計,實(shí)現將是一個(gè)很清晰的任務(wù)。此外,由于我們在體系原型階段設計和實(shí)現了系統的一個(gè)垂直部分,因此在實(shí)現階段我們不會(huì )碰到很多麻煩事情。在許多公司中,開(kāi)發(fā)者通常都是過(guò)早進(jìn)入實(shí)現階段,特別是當經(jīng)理在監視他們的時(shí)候,因為對于他們,做其它的事情等于浪費公司的時(shí)間。
結果是,不再花時(shí)間來(lái)畫(huà)UML框圖,而是在代碼開(kāi)發(fā)中測試想法,這要花數星期和幾個(gè)月的時(shí)間,在這種情形下,所有的體系決議和設計都是在代碼階段作出的,通常要在幾個(gè)月后才會(huì )發(fā)現開(kāi)發(fā)已經(jīng)進(jìn)入了一個(gè)錯誤的方向。
VI、確認
確認包括有測試以驗證該系統符合設計并且滿(mǎn)足需求。在整個(gè)開(kāi)發(fā)周期中,驗證發(fā)生在開(kāi)發(fā)和安裝階段。單元測試、集成測試和用戶(hù)容忍度測試都是重要的主題
VII、組合和配置
組件裝配和方案配置在J2EE的開(kāi)發(fā)中是特別重要的。開(kāi)發(fā)和安裝的環(huán)境可能是完全不同的。如果EJB處在系統中,你需要使用廠(chǎng)家的專(zhuān)門(mén)工具來(lái)提出產(chǎn)生容器的類(lèi),上面我也提到過(guò),Web或者應用組件的配置對于不同的廠(chǎng)家都是不一樣的。你還必須考慮要配置的系統是否擁有任何廠(chǎng)家指定的代碼實(shí)現。在一個(gè)可擴展的體系中,系統的結構應該是穩定的,但是應該可以支持增加配置新的或者舊的組件,而無(wú)需影響整個(gè)系統。
VIII、運作和維護
在最后的階段,應用交付到用戶(hù)的手中,你必須為他們提供培訓、文檔和教育。用戶(hù)將會(huì )發(fā)現問(wèn)題和可能會(huì )提出新的改進(jìn)。你必須通過(guò)正確地修改管理過(guò)程來(lái)處理這些需求。你無(wú)需為了配置一個(gè)新的組件或者替換一個(gè)舊的組件而關(guān)閉一個(gè)正在工作的系統。
體系開(kāi)發(fā)流程
我們必須做許多體系的決定,因此我們必須整理出一個(gè)體系開(kāi)發(fā)的流程。對于一個(gè)企業(yè)來(lái)說(shuō),通常有許多應用項目,其中的一些甚至會(huì )跨越幾年,從而導致系統圍繞許多周期而變化。在你的領(lǐng)域中,許多同樣的項目中都會(huì )出現同樣的需求。你應該很容易地重新使用一個(gè)擴展的和可重用的體系,它們可能在上個(gè)項目周期或者其它的項目中。這樣會(huì )有一個(gè)對普遍架構的需求,可重用的軟件架構可為家族式的軟件應用提供一個(gè)普遍的架構。
如果這是你的首個(gè)J2EE項目,你的體系必須被原型化,進(jìn)行測試、分析,然后再重復。BluePrint提供了許多好的設計指導方針和最佳的練習,寵物店的例子也是一個(gè)很好的參考體系。要很快地提出一個(gè)好的并且是高質(zhì)量的解決方案的有效方法是使用和擴展BluePrint參考體系,然后插入到你自己的商業(yè)組件中。
使用參考體系
就我的理解來(lái)說(shuō),寵物店體系的本質(zhì)是Model-View-Controller和Command模型。你可以將這些模型應用到以Web-centric和EJB-centric的系統。對于每個(gè)域對象,一個(gè)視圖是用嵌套的JSP表現。一個(gè)controller處理與商業(yè)相關(guān)的事件,而域對象封裝商業(yè)邏輯、事務(wù)和安全。我們使用前臺的servlet作為中央的controller,以接收和解釋所有用戶(hù)的操作。它分派商業(yè)事件到指定的域對象controllers,這些controllers可調用域對象來(lái)改變持續的狀態(tài)。根據這個(gè)事件處理的結果,一個(gè)controller選擇下一個(gè)顯示的視圖。以下的組件對于體系都是很重要的,我們可以修改并且應用在大部分的J2EE應用:
MainServlet: 前臺的組件是Web容器和該架構之間的接口
ModelUpdateListener: 是獲取模型更新事件的對象的接口
ModelUpdateNotifier:在更新模型事件發(fā)生的時(shí)候通知監聽(tīng)者
RequestProcessor: 處理由MainServlet接收的全部請求
RequestHandler:plug-n-play請求處理器組件的接口
RequestHandlerMapping:包含有請求處理器映射規則
RequestToEventTranslator:根據請求處理器的映射規則,中央請求處理器委派請求處理到plug-n-play請求處理組件。到商業(yè)事件的透明http請求
EStoreEvent: 商業(yè)事件
ShoppingClientControllerWebImpl: Proxy-to-EJB層前臺控制器
ScreenflowManager: 控制屏幕流,選擇視圖
ModelUpdateManager: EJB層模型更新管理器,通報由于一個(gè)事件而導致的模型修改
ShoppingClientControllerEJB: EJB層前臺,為EJB客戶(hù)提供遠程服務(wù)
StateMachine:中央事件處理器,根據狀態(tài)處理器的映射規則,委派事件處理至plug-n-play處理器組件
StateHandler: EJB層狀態(tài)處理器接口
StateHandlerMapping: 包含狀態(tài)處理器映射規則
擴展參考體系
BluePrint的例子應用是一個(gè)好的起點(diǎn),你還應該修改它以配合不同的項目和領(lǐng)域。設計模型是可重用的微體系,你可以使用它來(lái)擴展參考體系。BluePrint提供了一個(gè)非常有用的J2EE模型目錄,而23個(gè)“Gang of Four”模型都是極好的資源。例如,如果你想擴展參考體系以支持工作流管理,你可以在配置或者運行時(shí)使用中央controller來(lái)動(dòng)態(tài)注冊事件處理器。中央controller要求每個(gè)注冊的事件處理器處理一個(gè)事件,直到一個(gè)處理器返回一個(gè)指示已經(jīng)到達命令串末尾的信息。
插入你的商業(yè)組件
J2EE技術(shù)對于每個(gè)人都是一樣的,但是對于不同的領(lǐng)域,我們需要解決的問(wèn)題都是不同的。一旦你建立了一個(gè)基本的J2EE框架,你就必須利用一些use cases來(lái)展示該體系可為你的領(lǐng)域工作。你可以通過(guò)選擇一些情形,最好是該系統的一個(gè)重要的功能,或者使用得最多的而且可帶來(lái)明顯的技術(shù)上的冒險的情形。由域分析模型開(kāi)始,然后嘗試映射你的域對象到高端和低端的設計模型,就象我們在圖5和6中的所示。實(shí)現低級別的設計模型,并且測試看它是否真正地運作。如果所有都如設想般運作,你就可以再重復上一步,即找冒險的情形、更多的設想來(lái)測試以擴展體系的覆蓋。在經(jīng)過(guò)反復的驗證后,初始化的體系原型應該就會(huì )變得穩定。你可以認識到哪些組件是可以購買(mǎi)的,舊系統的哪些方面是應該保留的,以及如何為它們做接口。下一步就是軟件設計,你可以使用設計指南中指定的類(lèi)似方法和流程來(lái)進(jìn)行繼續的開(kāi)發(fā)。
按部就班
我們使用了一個(gè)流程的形式,將一個(gè)復雜的問(wèn)題分解為幾個(gè)小的部分,以便我們能更容易地理解和解決它們。在這篇文章中,我們將J2EE的開(kāi)發(fā)分解為8個(gè)步驟,集中介紹了體系和設計。我這里介紹了重要的體系主題和作出體系決定的一個(gè)流程。我還討論了J2EE體系的角色和可交付。
學(xué)習通過(guò)這些步驟來(lái)開(kāi)發(fā)J2EE的方案就象學(xué)習舞蹈一樣。你首先需要自覺(jué)和堅持不懈地練習基本的舞步。一旦你熟悉了它們,你就會(huì )想到將它們放在一起,并且更集中在曲子里每步的大小、速度、流和節奏。不過(guò)你不應該被一個(gè)流程來(lái)限制你的創(chuàng )造力。相反,你應該使用和擴展該流程來(lái)滿(mǎn)足你的特定需要。要記住,你的最終目標是設計出一個(gè)完整的J2EE方案來(lái)滿(mǎn)足你的客戶(hù)需求。
【開(kāi)發(fā)完整J2EE解決方案的八個(gè)步驟】相關(guān)文章:
J2EE項目開(kāi)發(fā)風(fēng)險匯總03-10
中餐服務(wù)十八個(gè)步驟01-22
Eclipse j2ee開(kāi)發(fā)環(huán)境的搭建12-26
Java Web開(kāi)發(fā)和J2EE的區別03-29
沖泡大紅袍的八個(gè)步驟06-27
紫砂壺泡茶的八個(gè)步驟04-19