J2EE系統(tǒng)架構(gòu)和過(guò)程淺析
Java2企業(yè)版(J2EE)平臺(tái)由四個(gè)關(guān)鍵部分構(gòu)成:規(guī)格說(shuō)明、參考實(shí)現(xiàn)、兼容性測(cè)試套件和藍(lán)圖(BluePrint)計(jì)劃。藍(lán)圖描繪了分布式組件架構(gòu)最好的實(shí)踐和設(shè)計(jì)指導(dǎo)方針。本文基于Rational統(tǒng)一過(guò)程和BluePrint示例程序介紹一個(gè)八步驟J2EE開(kāi)發(fā)方法學(xué)。
通過(guò)閱讀這篇文章,你可以了解許多重要的J2EE架構(gòu)的話題,并且能夠擴(kuò)展和修改這個(gè)簡(jiǎn)單的方法來(lái)解決自己特有的業(yè)務(wù)問(wèn)題。在商業(yè)世界里,我們使用Java2企業(yè)版(J2EE)解決業(yè)務(wù)問(wèn)題、開(kāi)發(fā)商業(yè)軟件或者提供轉(zhuǎn)包服務(wù)。如果一家公司想使用多層體系結(jié)構(gòu)建造一個(gè)電子商務(wù)網(wǎng)站,通常在整個(gè)開(kāi)發(fā)生命周期中需要涉及到管理者、架構(gòu)師,設(shè)計(jì)人員、編程人員、測(cè)試人員和數(shù)據(jù)庫(kù)專(zhuān)家。為了使不同部門(mén)能高效率地工作,他們經(jīng)常需要一個(gè)軟件開(kāi)發(fā)過(guò)程。一些經(jīng)典的開(kāi)發(fā)過(guò)程包括瀑布模型、快速應(yīng)用開(kāi)發(fā)(RAD)和極限編程(XP)。
本文我們將集中于一個(gè)流行的軟件工程過(guò)程,即Rational統(tǒng)一過(guò)程(RUP)。RUP提供了一個(gè)給角色分配任務(wù)和責(zé)任的嚴(yán)格方法。它的目標(biāo)是保證我們?cè)陬A(yù)期的進(jìn)度和預(yù)算內(nèi)開(kāi)發(fā)出滿足用戶需求的高質(zhì)量軟件。
在J2EE開(kāi)發(fā)中使用RUP出于以下三個(gè)原因。首先,RUP以架構(gòu)為中心;在將資源分配給全面開(kāi)發(fā)之前,它先開(kāi)發(fā)一個(gè)可執(zhí)行的架構(gòu)原型。其次,RUP是迭代并基于構(gòu)件的。該架構(gòu)基線通常包括一個(gè)框架或基礎(chǔ)設(shè)施以便于通過(guò)迭代增加構(gòu)件,在不影響系統(tǒng)其他部分的前提下定制和擴(kuò)展一個(gè)系統(tǒng)的功能。最后,RUP利用一門(mén)工業(yè)標(biāo)準(zhǔn)語(yǔ)言--UML,可視化建模系統(tǒng)的架構(gòu)和構(gòu)件。RUP有四個(gè)不同的開(kāi)發(fā)階段:初始、細(xì)化、構(gòu)造和移交。然而,本文從技術(shù)角度覆蓋了J2EE開(kāi)發(fā)的八個(gè)必要活動(dòng),主要集中在系統(tǒng)架構(gòu)。
1、需求分析需求分析描述系統(tǒng)應(yīng)該做什么或不應(yīng)該做什么使得開(kāi)發(fā)者和客戶可以簽署一份原始的商業(yè)合同??梢允褂脴I(yè)務(wù)概念、領(lǐng)域術(shù)語(yǔ)、用例和用戶界面(UI)模型形成功能需求文檔。對(duì)于非功能需求,如性能和事務(wù),可以在需求文檔附件中詳細(xì)說(shuō)明。根據(jù)參與項(xiàng)目深度的不同,確定在紙上還是使用HTML建造高層UI模型。
在一個(gè)典型電子商務(wù)系統(tǒng)中的兩個(gè)用例。查看訂單(viewOrder)用例告訴我們一個(gè)用戶通過(guò)Web界面登陸系統(tǒng)、查看訂單列表,點(diǎn)擊鏈接查看特定訂單的詳細(xì)信息。增加訂單項(xiàng)(addLineItem)用例告訴我們?yōu)g覽產(chǎn)品列表、選擇感興趣的產(chǎn)品并將它們添加到購(gòu)買(mǎi)訂單中。
2、面向?qū)ο蠓治鋈藛T構(gòu)造問(wèn)題領(lǐng)域模型:類(lèi)、對(duì)象和交互。分析應(yīng)該與技術(shù)和實(shí)現(xiàn)細(xì)節(jié)無(wú)關(guān),并包含一個(gè)理想的模型。對(duì)象分析可以幫助理解問(wèn)題并獲得關(guān)于問(wèn)題領(lǐng)域的知識(shí)。因?yàn)闃I(yè)務(wù)過(guò)程的改變比信息技術(shù)的改變要慢得多,所以必須要維持一個(gè)不含技術(shù)細(xì)節(jié)的純領(lǐng)域模型。這兩個(gè)步驟--需求分析和面向?qū)ο蠓治?-不是J2EE特有的;對(duì)許多面向?qū)ο蠓椒▽W(xué)來(lái)說(shuō),它們都非常通用。
一個(gè)寵物店示例程序的高層對(duì)象分析模型。它用圖例說(shuō)明了我們從需求分析用例中識(shí)別的主要概念。我們把這些概念建模成對(duì)象并標(biāo)識(shí)它們的關(guān)系。為了開(kāi)發(fā)架構(gòu),可以選擇一個(gè)縱向聯(lián)合部分(verticalpiece)--經(jīng)常是關(guān)鍵部分,如訂單領(lǐng)域?qū)ο竽P?-進(jìn)行對(duì)象設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試和部署。(縱向聯(lián)合部分,一個(gè)RUP概念,是指系統(tǒng)的一小部分。起始點(diǎn)是圖1所示的用例子集和圖3所示的領(lǐng)域分析模型。一個(gè)縱向聯(lián)合部分的實(shí)現(xiàn)結(jié)果是一個(gè)全功能的微小系統(tǒng),包括UI層的JSP,中間層業(yè)務(wù)對(duì)象如EJB和后端數(shù)據(jù)庫(kù)。)可以將從原型中獲得的經(jīng)驗(yàn)應(yīng)用于領(lǐng)域?qū)ο蟛⒆鳛閷?duì)象設(shè)計(jì)階段的指導(dǎo)。
3、架構(gòu)規(guī)格說(shuō)明經(jīng)過(guò)前面兩個(gè)步驟,業(yè)務(wù)領(lǐng)域問(wèn)題和需求應(yīng)該比較明確了。現(xiàn)在,我們將工作集中在技術(shù)策略和架構(gòu)上。架構(gòu)是指所有構(gòu)件組合定義系統(tǒng)的一個(gè)藍(lán)圖:結(jié)構(gòu)、接口和通訊機(jī)制。我們可以進(jìn)一步將架構(gòu)分為企業(yè)級(jí)和應(yīng)用級(jí)架構(gòu)。企業(yè)級(jí)系統(tǒng)架構(gòu)企業(yè)級(jí)系統(tǒng)架構(gòu)包括硬件和軟件基礎(chǔ)設(shè)施、網(wǎng)絡(luò)布局、開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境等等。它反映了一個(gè)企業(yè)的長(zhǎng)期投資。開(kāi)發(fā)前,需要評(píng)估已存在的軟件和硬件基礎(chǔ)設(shè)施,如果不完全支持J2EE的話,增加新構(gòu)件更新已存在系統(tǒng)。你需要徹底地評(píng)估硬件,包括計(jì)算機(jī)、路由器、網(wǎng)絡(luò)轉(zhuǎn)換器和網(wǎng)絡(luò)布局,因?yàn)樗鼈兌加绊懙较到y(tǒng)的性能和可靠性。
4企業(yè)級(jí)架構(gòu):一個(gè)多層企業(yè)級(jí)架構(gòu)包括以下幾個(gè)主要構(gòu)件:一個(gè)Web瀏覽器客戶端,可能在也可能不在客戶端組織的防火墻內(nèi)一個(gè)HTTP服務(wù)器,是一個(gè)對(duì)公眾開(kāi)放的Web服務(wù)器。它通常位于一個(gè)稱(chēng)作DMZ的子網(wǎng)內(nèi)Web容器主表示層和可能的業(yè)務(wù)邏輯構(gòu)件應(yīng)用程序容器主業(yè)務(wù)邏輯構(gòu)件關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)和數(shù)據(jù)庫(kù)主數(shù)據(jù)、數(shù)據(jù)邏輯你使用的系統(tǒng)架構(gòu)類(lèi)型依賴(lài)于安全、性能和可靠性的需求,也依賴(lài)于組織的財(cái)政狀況。在缺少經(jīng)驗(yàn)的情況下,也可以適當(dāng)?shù)貜囊粋€(gè)修理廠電話訂購(gòu)一臺(tái)簡(jiǎn)單地二手計(jì)算機(jī)。
Internet上有許多開(kāi)放源代碼的操作系統(tǒng)、Web服務(wù)器、應(yīng)用程序服務(wù)器和數(shù)據(jù)庫(kù)管理系統(tǒng)。得到這些系統(tǒng)的代價(jià)只是幾百美元和熬幾個(gè)通宵。象許多華爾街金融機(jī)構(gòu)這樣的高端客戶也許需要一個(gè)連續(xù)支持安全、高吞吐量交易和不可預(yù)料網(wǎng)絡(luò)通訊的系統(tǒng)。在這種情況下,為了容錯(cuò),通常需要將Web服務(wù)器和應(yīng)用程序服務(wù)器集群配置成一個(gè)n層架構(gòu)。還需要評(píng)估軟件基礎(chǔ)設(shè)施,包括Web服務(wù)器、安全管理軟件、應(yīng)用程序服務(wù)器、域名管理服務(wù)器、數(shù)據(jù)庫(kù)管理系統(tǒng)和第三方軟件構(gòu)件。如果還沒(méi)有購(gòu)買(mǎi)應(yīng)用程序服務(wù)器,選擇一個(gè)J2EE供應(yīng)商將是評(píng)估過(guò)程的一個(gè)重要方面。應(yīng)該注意到不同的供應(yīng)商對(duì)J2EE的實(shí)現(xiàn)程度是不同的,一些供應(yīng)商只支持老的J2EE版本。
另外,一些Web容器或應(yīng)用程序容器可能比其他的速度要快。除了實(shí)現(xiàn)J2EE規(guī)范外,許多供應(yīng)商還出售J2EE基礎(chǔ)構(gòu)件或框架。選擇一個(gè)穩(wěn)定的提供支持的J2EE供應(yīng)商也非常關(guān)鍵。你可以在系統(tǒng)基礎(chǔ)設(shè)施層面上購(gòu)買(mǎi)或開(kāi)發(fā)的通用功能包括:事務(wù)國(guó)際化和本地化集群和對(duì)象分布應(yīng)用程序性能度量和剖析通訊工作流管理入口和個(gè)性化管理層對(duì)層通訊協(xié)議安全和防火墻應(yīng)用架構(gòu)應(yīng)用架構(gòu)參考一個(gè)特定的項(xiàng)目和規(guī)范建立在企業(yè)級(jí)系統(tǒng)架構(gòu)的上層。在基礎(chǔ)設(shè)施完成后,架構(gòu)師研究怎樣構(gòu)造一個(gè)特定的應(yīng)用。如果你的企業(yè)級(jí)架構(gòu)僅部分支持老的J2EE版本,可以先升級(jí)你的系統(tǒng)。如果由于預(yù)算或時(shí)間關(guān)系不能升級(jí),那么必須在更老版本規(guī)定的技術(shù)范圍內(nèi)開(kāi)展工作。雖然構(gòu)造企業(yè)級(jí)重用構(gòu)件非常重要,但是必須首先要能夠使用。這里的最終目標(biāo)是滿足客戶的需求--一次一個(gè)項(xiàng)目。
架構(gòu)師不是設(shè)計(jì)師;架構(gòu)和設(shè)計(jì)是完全不同。一個(gè)應(yīng)用架構(gòu)的范圍包括系統(tǒng)的主要結(jié)構(gòu)、架構(gòu)設(shè)計(jì)模式和可以在上面增加構(gòu)件的框架。架構(gòu)主要關(guān)注的是非功能性方面,而設(shè)計(jì)關(guān)注應(yīng)用業(yè)務(wù)用例將領(lǐng)域?qū)ο竽P娃D(zhuǎn)換成技術(shù)對(duì)象模型。應(yīng)用架構(gòu)是項(xiàng)目的結(jié)構(gòu),一個(gè)特殊的應(yīng)用程序。通過(guò)應(yīng)用架構(gòu)開(kāi)發(fā),你通常必須要做的應(yīng)用架構(gòu)決定包括:層之間進(jìn)行功能劃分領(lǐng)域?qū)ο蠼RWo(hù)的遺留系統(tǒng)要購(gòu)買(mǎi)的軟件構(gòu)件要開(kāi)發(fā)的構(gòu)件怎樣集成第三方構(gòu)件圖3的訂單領(lǐng)域?qū)ο笳f(shuō)明了怎樣對(duì)領(lǐng)域?qū)ο筮M(jìn)行建模。利用當(dāng)前的Java技術(shù),可以將領(lǐng)域?qū)ο蠓植荚谧鳛殚_(kāi)發(fā)者管理持續(xù)性對(duì)象的Web容器中、應(yīng)用程序服務(wù)器的EJB中或者作為RDBMS宿主的Java存儲(chǔ)過(guò)程中。在寵物店藍(lán)圖中,我們將訂單對(duì)象設(shè)計(jì)成一個(gè)實(shí)體bean,一個(gè)詳細(xì)對(duì)象和一個(gè)數(shù)據(jù)訪問(wèn)對(duì)象,如圖5和后面的圖6所示。當(dāng)你看到這個(gè)的時(shí)候,你應(yīng)該意識(shí)到架構(gòu)的重要性。為什么分析模型中的一個(gè)領(lǐng)域?qū)ο笥成涑蛇@么多對(duì)象?如果改變?cè)O(shè)計(jì),會(huì)出現(xiàn)什么問(wèn)題?你也許聽(tīng)說(shuō)過(guò)EJB的好處,但是要注意不同供應(yīng)商的性能是不同的。當(dāng)一種新技術(shù)到來(lái)的時(shí)候,你需要在投入全面設(shè)計(jì)之前進(jìn)行一些研究。你可以經(jīng)常地將設(shè)計(jì)和實(shí)現(xiàn)領(lǐng)域?qū)ο竽P涂v向聯(lián)合部分的經(jīng)驗(yàn)應(yīng)用到其他許多領(lǐng)域?qū)ο笾?。這就是架構(gòu)開(kāi)發(fā)的內(nèi)容。
對(duì)象設(shè)計(jì)在架構(gòu)規(guī)范的指導(dǎo)下,設(shè)計(jì)從技術(shù)上擴(kuò)展和修改了分析結(jié)果。雖然分析階段的領(lǐng)域?qū)ο蠼?yīng)該與技術(shù)細(xì)節(jié)無(wú)關(guān),但是對(duì)象設(shè)計(jì)完全依賴(lài)于技術(shù)因素,包括平臺(tái)、語(yǔ)言的類(lèi)型和架構(gòu)開(kāi)發(fā)階段選擇的供應(yīng)商。分析時(shí),抬頭望著星星,但在設(shè)計(jì)階段,則要腳踏實(shí)地。理論上,為了維持業(yè)務(wù)對(duì)象的基本屬性和行為,除非絕對(duì)必要,不應(yīng)該破壞它們。在架構(gòu)結(jié)果的指導(dǎo)下,詳細(xì)設(shè)計(jì)工作應(yīng)該說(shuō)明所有類(lèi)的規(guī)格,包括必須實(shí)現(xiàn)的屬性、它們的詳細(xì)接口和偽代碼或操作的純文本描述。規(guī)格說(shuō)明應(yīng)該足夠詳細(xì)使得和模型圖結(jié)合時(shí),它可以提供所有必須的編碼信息。在許多自動(dòng)化軟件生產(chǎn)過(guò)程中,我們可以從面向?qū)ο髨D生成代碼框架。注意樁(stub)和框架(skeleton)在圖中經(jīng)常是不可見(jiàn)的,因?yàn)樗鼈儗?duì)設(shè)計(jì)人員和編程員來(lái)說(shuō)是透明的。
#p#對(duì)象設(shè)計(jì)模型:訂單EJB詳細(xì)設(shè)計(jì)在完成了詳細(xì)對(duì)象設(shè)計(jì)后,還需要完成領(lǐng)域?qū)ο蟮膶?duì)象-關(guān)系映射。原因是雖然面向?qū)ο蠓椒▽W(xué)現(xiàn)在非常流行,但是大多數(shù)流行且成熟的持續(xù)性存儲(chǔ)卻是關(guān)系型的。另外,在許多情況下,客戶的IT基礎(chǔ)設(shè)施已經(jīng)反映了對(duì)商業(yè)RDBMS供應(yīng)商的投資和偏愛(ài)。所以,將領(lǐng)域?qū)ο筠D(zhuǎn)換成關(guān)系模型或數(shù)據(jù)庫(kù)表是非常重要的。雖然有許多容器管理的持續(xù)性工具,但它們不能取代好的關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)。
5、實(shí)現(xiàn)在良好的架構(gòu)和詳細(xì)設(shè)計(jì)條件下,實(shí)現(xiàn)應(yīng)該是一個(gè)明確的任務(wù)。另外,因?yàn)槲覀冊(cè)O(shè)計(jì)和實(shí)現(xiàn)架構(gòu)原型階段的縱向聯(lián)合部分,所以實(shí)現(xiàn)階段應(yīng)該更沒(méi)有什么值得驚訝的。在許多組織中,開(kāi)發(fā)者經(jīng)常過(guò)早地到達(dá)實(shí)現(xiàn)階段。尤其當(dāng)管理者盯著開(kāi)發(fā)人員確保在編碼,而不是做他們認(rèn)為在浪費(fèi)公司時(shí)間的其他事情時(shí),這種情況變得更加嚴(yán)重。結(jié)果,不再花數(shù)小時(shí)或數(shù)天繪出UML草圖,而是通常在發(fā)費(fèi)數(shù)周或數(shù)月編碼的同時(shí)測(cè)試自己的想法。由于在這種情況下,所有地架構(gòu)決定和設(shè)計(jì)都是在編碼階段做出來(lái)的,所以經(jīng)常過(guò)了數(shù)月后才發(fā)現(xiàn)開(kāi)發(fā)的方向出錯(cuò)了。
6、驗(yàn)證驗(yàn)證包括測(cè)試驗(yàn)證系統(tǒng)按設(shè)計(jì)要求運(yùn)行并滿足需求。驗(yàn)證過(guò)程發(fā)生在整個(gè)開(kāi)發(fā)生命周期的開(kāi)發(fā)和產(chǎn)品環(huán)境中。單元測(cè)試、集成測(cè)試和用戶測(cè)試本身就是非常重要的主題。
7、裝配和部署構(gòu)件裝配和解決方案部署在J2EE開(kāi)發(fā)中特別重要。開(kāi)發(fā)和產(chǎn)品環(huán)境可能非常不同。如果EJB在系統(tǒng)中,你需要使用供應(yīng)商特定的工具得到容器自動(dòng)生成的類(lèi),因?yàn)?,正如我以前指出的,Web和應(yīng)用程序構(gòu)件配置對(duì)不同的供應(yīng)商來(lái)說(shuō)是不同的。你也必須考慮要部署的系統(tǒng)是否含有供應(yīng)商特定代碼實(shí)現(xiàn)。在可擴(kuò)展架構(gòu)中,系統(tǒng)結(jié)構(gòu)應(yīng)該是穩(wěn)定的但也應(yīng)該在不影響整個(gè)系統(tǒng)的條件下支持新或老構(gòu)件的增量部署。
8、運(yùn)行和維護(hù)在最后階段,應(yīng)用程序到了用戶手中,你必須給他們提供培訓(xùn)和文檔。用戶會(huì)發(fā)現(xiàn)錯(cuò)誤并可能要求新特性。你必須適當(dāng)?shù)馗淖児芾磉^(guò)程來(lái)處理這些情況。你不必為了部署一個(gè)新構(gòu)件或取代老構(gòu)件而關(guān)閉一個(gè)正在運(yùn)行的系統(tǒng)。架構(gòu)開(kāi)發(fā)過(guò)程知道了必須做出許多架構(gòu)決定,因此我們必須為架構(gòu)開(kāi)發(fā)描繪一個(gè)過(guò)程。對(duì)于一個(gè)企業(yè)來(lái)說(shuō)通常有許多應(yīng)用項(xiàng)目,它們中的一些可能跨越數(shù)年,結(jié)果是系統(tǒng)演化包含許多周期。在你的領(lǐng)域里存在著許多跨越多個(gè)項(xiàng)目的通用需求。你應(yīng)該不費(fèi)力地在它的生命周期或其他項(xiàng)目中使用以前項(xiàng)目周期的可擴(kuò)展且可重用的架構(gòu)。為一系列軟件應(yīng)用提供同屬結(jié)構(gòu)和行為的通用框架和可重用軟件架構(gòu)是非常需要的。
如果是第一個(gè)J2EE項(xiàng)目,架構(gòu)必須做原型、測(cè)試、度量、分析并在迭代中進(jìn)行推敲。藍(lán)圖提供了許多好的設(shè)計(jì)指導(dǎo)和實(shí)踐,寵物店示例程序可以作為一個(gè)很好的參考架構(gòu)。最有效地快速、高質(zhì)量發(fā)布好的解決方案的方法是接受和擴(kuò)展藍(lán)圖參考架構(gòu)并插入你自己的業(yè)務(wù)構(gòu)件。你最后要做的就是改造車(chē)輪。接受一個(gè)參考架構(gòu)就我的理解,寵物店架構(gòu)的精華是模型-視圖-控制和命令模式。你可以將這些模式應(yīng)用到以Web為中心和以EJB為中心的系統(tǒng)中。對(duì)于每個(gè)領(lǐng)域?qū)ο螅晥D用嵌套的JSP表示。控制器處理相關(guān)的業(yè)務(wù)事件,領(lǐng)域?qū)ο蠓庋b業(yè)務(wù)邏輯、事物和安全。我們使用門(mén)戶servlet作為中心控制器接受和截獲所有用戶的動(dòng)作。它將業(yè)務(wù)事件分發(fā)給特定的調(diào)用領(lǐng)域?qū)ο蟾淖兂掷m(xù)狀態(tài)的領(lǐng)域?qū)ο罂刂破?。依靠事件處理結(jié)果,控制器選擇下一個(gè)要展現(xiàn)的視圖。
下面是我們可以修改并在大多數(shù)J2EE應(yīng)用程序中使用的主要構(gòu)件:
a、MainServlet:門(mén)戶構(gòu)件,Web容器和框架之間的接口
b、ModelUpdateListener:獲得模型更新事件對(duì)象的接口
c、ModelUpdateNotifier:當(dāng)更新模型事件發(fā)生時(shí)通知偵聽(tīng)器
d、RequestProcessor:處理所有從MainServlet來(lái)的請(qǐng)求。
e、RequestHandler:即插即用請(qǐng)求處理構(gòu)件接口
f、RequestHandlerMapping:包含請(qǐng)求處理映射規(guī)則
g、RequestToEventTranslator:中心請(qǐng)求處理器根據(jù)請(qǐng)求處理映射規(guī)則代理即插即用請(qǐng)求處理構(gòu)件的請(qǐng)求。將http請(qǐng)求轉(zhuǎn)換為業(yè)務(wù)事件
h、EstoreEvent:業(yè)務(wù)事件
i、ShoppingClientControllerWebImpl:代理EJB層門(mén)戶控制器
j、ScreenflowManager:控制屏幕流,選擇視圖
k、ModelUpdateManager:EJB層模型更新管理器,通知什么模型由于事件發(fā)生了改變
l、ShoppingClientControllerEJB:EJB層門(mén)戶,為EJB客戶提供遠(yuǎn)程服務(wù)
m、StateMachine:中心事件處理器,根據(jù)狀態(tài)處理映射規(guī)則代理即插即用處理構(gòu)件的事件處理
n、StateHandler:EJB層狀態(tài)處理接口
o、StateHandlerMapping:包含狀態(tài)處理映射規(guī)則擴(kuò)展參考架構(gòu)雖然藍(lán)圖示例程序是一個(gè)好的起點(diǎn),但應(yīng)該根據(jù)每個(gè)項(xiàng)目或領(lǐng)域修改它。
設(shè)計(jì)模式是可重用的微體系結(jié)構(gòu),可以使用它擴(kuò)展參考架構(gòu)。提供了一組有用的J2EE模式目錄的藍(lán)圖和23個(gè)"四人幫"模式都是非常不錯(cuò)的資源。例如,如果想擴(kuò)展參考架構(gòu)支持工作流管理,你可以在部署或運(yùn)行時(shí)動(dòng)態(tài)地在中心控制器注冊(cè)事件處理器。中心控制器會(huì)詢(xún)問(wèn)每個(gè)注冊(cè)的事件處理器直到一個(gè)處理器返回消息表明到了命令鏈的末端。插入你的業(yè)務(wù)構(gòu)件J2EE技術(shù)對(duì)每個(gè)人都是一樣的,但是不同的領(lǐng)域,我們要解決的問(wèn)題是不同的。一旦建立了一個(gè)基本的J2EE框架,必須實(shí)現(xiàn)一些用例來(lái)說(shuō)明架構(gòu)確實(shí)可以為你的領(lǐng)域服務(wù)。可以通過(guò)選用捕獲系統(tǒng)關(guān)鍵功能的場(chǎng)景來(lái)實(shí)現(xiàn),這些場(chǎng)景經(jīng)常使用來(lái)展現(xiàn)關(guān)鍵的技術(shù)風(fēng)險(xiǎn)。
從領(lǐng)域分析模型入手,可以將領(lǐng)域?qū)ο笥成涑筛邔雍偷蛯釉O(shè)計(jì)模型。實(shí)現(xiàn)低層設(shè)計(jì)模型并測(cè)試是否真正在工作。如果每件事都按計(jì)劃運(yùn)行,那么重新評(píng)估風(fēng)險(xiǎn)開(kāi)始下一個(gè)迭代,擴(kuò)展要考慮的場(chǎng)景并選擇更多的場(chǎng)景擴(kuò)展架構(gòu)的覆蓋范圍。經(jīng)過(guò)幾次迭代后,原始的架構(gòu)原型應(yīng)該變得穩(wěn)定。識(shí)別要購(gòu)買(mǎi)的構(gòu)件,要保留的遺留系統(tǒng)和怎樣將它們對(duì)接。
下一步是軟件設(shè)計(jì),你可以使用設(shè)計(jì)指導(dǎo)中規(guī)定好的類(lèi)似方法和過(guò)程繼續(xù)開(kāi)發(fā)。一步一步我們使用一個(gè)過(guò)程來(lái)將一個(gè)復(fù)雜問(wèn)題分解為較小的幾個(gè)問(wèn)題,這使得我們可以更容易的理解和解決它們。在本文中,我們將J2EE開(kāi)發(fā)分解為八個(gè)步驟,主要集中在架構(gòu)和設(shè)計(jì)。我已經(jīng)闡述了重要的架構(gòu)并為架構(gòu)決定提供了一個(gè)過(guò)程。我也討論了J2EE架構(gòu)師的角色和可交付產(chǎn)品。學(xué)習(xí)使用這些步驟開(kāi)發(fā)J2EE解決方案就象學(xué)習(xí)跳舞的步驟一樣。首先需要自覺(jué)并持之以恒地練習(xí)基本步驟。但是,一旦你對(duì)它們相當(dāng)熟悉后,應(yīng)該將它們放在一起并將注意力更多地集中在規(guī)模、速度、流和特定上下文中每一步的節(jié)奏。但永遠(yuǎn)不要讓一個(gè)過(guò)程限制了創(chuàng)造性。而應(yīng)該接受和擴(kuò)展過(guò)程以滿足自己特殊需要。記住,最終目的是提供滿足客戶需求的完整的J2EE解決方案。
【編輯推薦】