摘 要:隨著信息化的發(fā)展,基于大型網(wǎng)絡(luò)信息系統(tǒng)的復(fù)雜性與應(yīng)變能力弱的特點(diǎn),出現(xiàn)了許多相應(yīng)的解決方案。在研究目前系統(tǒng)開發(fā)技術(shù)和規(guī)律的基礎(chǔ)上,分析和闡述一種輕量級(jí)開發(fā)的概念和原則,給出系統(tǒng)實(shí)現(xiàn)的技術(shù)模式,并以Spring,Struts,Hibernate技術(shù)框架的整合構(gòu)建系統(tǒng)整體的工作流機(jī)制,展示輕量級(jí)開發(fā)的優(yōu)勢。實(shí)踐證明,輕量級(jí)開發(fā)降低了系統(tǒng)開發(fā)的難度,提高了代碼復(fù)用性,使系統(tǒng)具有良好的可維護(hù)性和可擴(kuò)展性。
關(guān)鍵詞:J2EE;網(wǎng)絡(luò)信息系統(tǒng);輕量級(jí)開發(fā);工作流機(jī)制
中圖分類號(hào):TP311.13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004373X(2008)1811603
Research on Lightweight Development of Network Information System Based on J2EE
WANG Tong1,CHEN Ling2
(1.Science College,Air Force Engineering University,Xi′an,710043,China;2.Xi′an Communication Institute,Xi′an,710106,China)
Abstract:This paper analyzes and expounds the concept and principle of the lightweight development based on the research on present technology of information system development.It gives the mode of lightweight development and integrated Spring,Struts,Hibernate to build the workflow for system development.The lightweight development reduces the difficult of system development,improves code reuse,and guarantees the maintainability and extensibility of the system.
Keywords:J2EE;network information system;lightweight development;workflow mechanism
J2EE是Sun公司開發(fā)的用來設(shè)計(jì)企業(yè)網(wǎng)絡(luò)信息系統(tǒng)的一種開發(fā)平臺(tái),適合于大規(guī)模、多層次系統(tǒng)的開發(fā),具有可擴(kuò)展性、穩(wěn)定性、可靠安全的特點(diǎn)。J2EE為人們提供了一種新的基于B/S結(jié)構(gòu)的開發(fā)規(guī)范,但隨著信息化的發(fā)展,大型網(wǎng)絡(luò)管理系統(tǒng)逐漸呈現(xiàn)出業(yè)務(wù)密集、代碼復(fù)雜龐大、應(yīng)變能力弱、開發(fā)周期長等特點(diǎn),使原有單一的JSP/Sevlet技術(shù)已經(jīng)不能滿足信息系統(tǒng)復(fù)雜性日益增長的需要?;贘2EE技術(shù)的系統(tǒng)開發(fā)迫切需要一種優(yōu)化的架構(gòu)方案來分解系統(tǒng)的復(fù)雜,簡化應(yīng)用開發(fā)的過程,提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。因此,基于J2EE的輕量級(jí)開發(fā)逐漸成為一種新興的潮流。
1 輕量級(jí)開發(fā)的概念
無論從開發(fā)的技術(shù)還是過程都不能完整地定義輕量級(jí)開發(fā),它是一個(gè)包羅萬象的概念[1]。但輕量級(jí)開發(fā)通常與一套開發(fā)方法、框架以及設(shè)計(jì)原理一起使用,主要體現(xiàn)在:輕量級(jí)方法,即敏捷開發(fā)方法,包括極限編程(extreme programming)、 Scrum、動(dòng)態(tài)系統(tǒng)開發(fā)、Crystal等。它們以適應(yīng)性為基礎(chǔ),以人為核心,通過加強(qiáng)人員的溝通、調(diào)動(dòng)客戶的積極性,從需求出發(fā),簡單快速地交付和重構(gòu)高質(zhì)量可工作的軟件,是現(xiàn)有開發(fā)方法最佳實(shí)踐的組合。敏捷開發(fā)適合于小型開發(fā)團(tuán)隊(duì)。團(tuán)隊(duì)中每個(gè)工作人員都要合理地?fù)?dān)任起多個(gè)開發(fā)角色,如項(xiàng)目經(jīng)理、程序員等。工作中強(qiáng)調(diào)人員的協(xié)調(diào)和溝通,以及開發(fā)組件的獨(dú)立性和可重構(gòu)性,力求縮短開發(fā)周期,滿足不斷變化的即時(shí)需求。
輕量級(jí)框架,通過采用插件式體系結(jié)構(gòu)和微內(nèi)核機(jī)制,能夠把具有不同功能和特性的應(yīng)用框架集成在一起工作?!安寮襟w系結(jié)構(gòu)”把整個(gè)系統(tǒng)的開發(fā)看作是組件的開發(fā)與整合,能夠提供對組件的熱插拔機(jī)制。它不僅要求開發(fā)的組件要有較高的功能獨(dú)立性和統(tǒng)一的標(biāo)準(zhǔn)接口,還要求組件間的依賴關(guān)系及數(shù)據(jù)傳遞必須以低耦合非硬編碼的方式來實(shí)現(xiàn)?!拔?nèi)核”是將實(shí)現(xiàn)系統(tǒng)輕量級(jí)特性的核心服務(wù)提煉出來形成的一個(gè)功能獨(dú)立的模塊,是實(shí)現(xiàn)系統(tǒng)插件式體系結(jié)構(gòu)和業(yè)務(wù)功能的基礎(chǔ)。它以XML結(jié)構(gòu)化文檔來存儲(chǔ)配置系統(tǒng)組件間的依賴關(guān)系并提供了相應(yīng)的解析功能,使程序員不再以代碼耦合的方式來處理組件間的調(diào)用關(guān)系。它通常運(yùn)行在后臺(tái),以第三者的身份來管理組件的實(shí)例化和組件間的數(shù)據(jù)通信。
輕量級(jí)設(shè)計(jì)模式,是指程序設(shè)計(jì)中,對象和集成服務(wù)之間要松散耦合,允許組件的編寫盡量簡單化自由化,鼓勵(lì)人們使用普通的 Java 對象(Plain Ordinary Java Object,POJO)編程,而不是嚴(yán)格地遵循規(guī)范,艱苦地編寫類似于EJB 的重量級(jí)面向組件的業(yè)務(wù)邏輯或領(lǐng)域模型。
2 輕量級(jí)的原則
在輕量級(jí)開發(fā)的實(shí)踐中,還需要遵循以下原則:
追求輕量與簡單 整個(gè)開發(fā)過程中的所有工作,無論是構(gòu)建整體的開發(fā)方案還是組件的編寫與重構(gòu)等具體實(shí)際的開發(fā)工作,都應(yīng)當(dāng)體現(xiàn)這一基本原則。輕量級(jí)開發(fā)是追求開發(fā)方法和工作的輕量與簡單,并不意味著只適于開發(fā)規(guī)模小且功能簡單的系統(tǒng),而是要求開發(fā)人員在滿足系統(tǒng)功能要求的基礎(chǔ)上盡量采用實(shí)用、簡單的方法(包括合并過程、集成技術(shù))去簡化和解決問題,擺脫開發(fā)中繁瑣、復(fù)雜、低效率的工作。
適應(yīng)性 調(diào)動(dòng)客戶參與開發(fā)工作。開發(fā)人員能夠根據(jù)客戶的即時(shí)需求快速地構(gòu)建出可工作的組件。這些組件盡管可能充斥著很多的bug和漏洞,但只要能夠滿足用戶的需求,不影響投入使用,在輕量級(jí)開發(fā)中就是允許的。這些組件在以后的需求變更時(shí)還可以快速地進(jìn)行重構(gòu)、修補(bǔ)和完善。這種以適應(yīng)性為基礎(chǔ),客戶與開發(fā)人員同時(shí)參與其中的交互開發(fā)方式,減小了開發(fā)規(guī)范的約束,提高了開發(fā)的靈活度和工作效率,縮短了開發(fā)周期,保證了產(chǎn)品按市場需求發(fā)布,降低了由于開發(fā)周期過長所帶來的風(fēng)險(xiǎn)。
開放性 網(wǎng)絡(luò)信息系統(tǒng)的輕量級(jí)開發(fā)必須適應(yīng)網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫技術(shù)的發(fā)展,能夠充分利用各種開發(fā)技術(shù)的優(yōu)勢,使開發(fā)者最大自由地選擇使用新技術(shù)、新成果,來提高系統(tǒng)開發(fā)工作的質(zhì)量和效率。
3 輕量級(jí)系統(tǒng)開發(fā)的技術(shù)實(shí)現(xiàn)
輕量級(jí)技術(shù)在遵循J2EE開發(fā)規(guī)范的基礎(chǔ)上,采用輕量級(jí)容器(微內(nèi)核)和插件式體系結(jié)構(gòu)可以集成多種技術(shù)和組件模型來開發(fā)系統(tǒng),充分利用了當(dāng)前的技術(shù)優(yōu)勢以提高系統(tǒng)開發(fā)的效率。
3.1 輕量級(jí)容器
目前最流行的三種輕量級(jí)容器是:Spring Framework,HiveMind,PicoContainer,其中以Spring開發(fā)最為活躍,它不僅有豐富的產(chǎn)品文檔、完整的組件堆,而且具有許多支持整合多種技術(shù)的膠水代碼,使開發(fā)者可以更加輕松地使用J2EE平臺(tái)的企業(yè)服務(wù)。不同的輕量級(jí)容器包含著相同的設(shè)計(jì)模式和理念。以Spring為例,它是一個(gè)低侵入高擴(kuò)展的分布式應(yīng)用系統(tǒng)的開發(fā)框架,可以協(xié)調(diào)和整合系統(tǒng)程序的各個(gè)層面(包括Web業(yè)務(wù)層和數(shù)據(jù)持久層)。Spring中的膠水代碼為其組織和整合應(yīng)用程序的提供一種方法,使它可以集成多種技術(shù)框架在一起工作,如Sturts,JavaServer Faces(JSF),Hibernate以及其他第三方類庫。雖然有些框架是相互競爭的,但Spring并不試圖只支持一種框架,也沒有將開發(fā)局限于少量的標(biāo)準(zhǔn)服務(wù),而是讓開發(fā)者從大量提供的服務(wù)中自由選擇,甚至可以構(gòu)建自己的服務(wù)。Spring的這種設(shè)計(jì)理念還得益于工廠模式和依賴注入的機(jī)制。工廠模式就是通過一個(gè)類把其他具有不同參數(shù)或標(biāo)識(shí)的類組織起來統(tǒng)一管理,通過該容器類可以返回其中某個(gè)類的實(shí)例,即所有類實(shí)例化的接口。Spring提供2個(gè)實(shí)例化接口:BeanFactory和Application Context,其中ApplicationContext是BeanFactory的子類。Spring工廠允許程序員設(shè)計(jì)開發(fā)自定義類和調(diào)用第三方組件,并在其組件注冊文件bean.xml中配置類或組件的實(shí)例化參數(shù)。這樣就可以在程序中通過調(diào)用ApplicationContext或BeanFactory的GetBean方法,根據(jù)某個(gè)類的ID來創(chuàng)建它的實(shí)例。工廠模式增強(qiáng)了Spring容器的可擴(kuò)展性。所謂依賴注入,即處理組件間數(shù)據(jù)傳遞和調(diào)用關(guān)系的一種機(jī)制,包括設(shè)值注入(setter方法)和構(gòu)造注入2種方式。程序員只需在程序設(shè)計(jì)中直接使用某個(gè)實(shí)例的子對象屬性而不必?fù)?dān)心其是否初始化,因?yàn)镾pirng容器會(huì)在程序運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建所調(diào)用的組件實(shí)例。通過依賴注入托管組件使系統(tǒng)組件間的程序耦合變得松散,組件具有相對獨(dú)立性,利于實(shí)現(xiàn)容器的這種插件式體系結(jié)構(gòu)。Spring還包含對AOP技術(shù)的支持。AOP,即面向方面編程,是繼面向?qū)ο笤O(shè)計(jì)之后的一種新的編程思想。它允許程序員把系統(tǒng)中影響多個(gè)類的行為或橫向業(yè)務(wù)關(guān)注點(diǎn)(如日志和事務(wù)管理等)封裝成可重用的模塊,并將它們與Java對象相關(guān)聯(lián),從而消除了許多重復(fù)性的開發(fā)工作,提高了系統(tǒng)開發(fā)的效率和組件的利用率。膠水代碼、工廠模式、依賴注入、AOP技術(shù)構(gòu)成了輕量級(jí)容器的核心,為輕量快速的系統(tǒng)開發(fā)提供了基礎(chǔ)。
3.2 Web業(yè)務(wù)層
網(wǎng)絡(luò)信息系統(tǒng)的Web層主要采用MVC規(guī)范來實(shí)現(xiàn)。MVC規(guī)范包含了業(yè)務(wù)功能模塊(Model)、視圖表現(xiàn)層(View)、控制層(Controller)三個(gè)部分。這3個(gè)部分功能獨(dú)立、分工明確、協(xié)同工作,提高了應(yīng)用的可擴(kuò)展性及可維護(hù)性。Struts作為典型的MVC框架,提供了一套完備的開發(fā)規(guī)范和基礎(chǔ)類庫,可以充分地利用JSP與Servlet結(jié)合的優(yōu)點(diǎn),減輕程序員的工作量,已經(jīng)成為輕量級(jí)開發(fā)所支持的Web框架之一。在Struts的MVC結(jié)構(gòu)中,Model部分由ActionForm和JavaBean組成。ActionForm用于封裝用戶請求的參數(shù),JavaBean則實(shí)現(xiàn)業(yè)務(wù)處理的邏輯(包括數(shù)據(jù)庫的連接與訪問、業(yè)務(wù)數(shù)據(jù)的邏輯處理等)。View模塊采用JSP技術(shù)動(dòng)態(tài)輸出系統(tǒng)的響應(yīng),向客戶端呈現(xiàn)業(yè)務(wù)處理的結(jié)果。Controller包括系統(tǒng)控制器(ActionServlet)和業(yè)務(wù)控制器(Action)兩個(gè)部分,主要用Servlet實(shí)現(xiàn)請求的轉(zhuǎn)發(fā)和調(diào)用業(yè)務(wù)模塊處理請求。整個(gè)Struts的運(yùn)作由來自客戶端的請求驅(qū)動(dòng)。系統(tǒng)控制器自動(dòng)攔截用戶請求,并把請求參數(shù)封裝成ActionForm對象。如果需要調(diào)用業(yè)務(wù)控制器,則把請求轉(zhuǎn)發(fā)給相應(yīng)的Action處理,否則直接輸出請求的JSP頁面。業(yè)務(wù)控制器Action在獲得轉(zhuǎn)發(fā)的請求后,則調(diào)用相應(yīng)的業(yè)務(wù)邏輯模塊JavaBean來處理請求。Struts的工作流程如圖1所示:
3.3 數(shù)據(jù)連接-對象持久化
輕量級(jí)開發(fā)框架在系統(tǒng)底層與關(guān)系數(shù)據(jù)庫之間采用ORM(對象/關(guān)系映射)機(jī)制實(shí)現(xiàn)持久化操作。ORM是系統(tǒng)中數(shù)據(jù)持久層上的一類框架的特征規(guī)范,主要定義面向?qū)ο蟮某绦蛟O(shè)計(jì)到關(guān)系數(shù)據(jù)庫的映射,不僅包括類到表的映射,還包括類間關(guān)系到表間關(guān)系的映射,使程序中面向?qū)ο蟮牟僮鲗?shí)現(xiàn)為對數(shù)據(jù)庫中表的操作,是關(guān)聯(lián)程序設(shè)計(jì)和數(shù)據(jù)庫操作的中間件。與傳統(tǒng)JDBC的數(shù)據(jù)庫操作相比,ORM實(shí)現(xiàn)了面向?qū)ο蟮臄?shù)據(jù)庫操作方式,使程序員不必為程序中多個(gè)表的同類操作而進(jìn)行大量機(jī)械的重復(fù)性工作,也不必為表間復(fù)雜關(guān)系的處理而頭痛。
采用ORM機(jī)制,系統(tǒng)開發(fā)既可以利用面向?qū)ο蟪绦蛟O(shè)計(jì)的簡單易用性,又可以利用關(guān)系數(shù)據(jù)庫的技術(shù)優(yōu)勢,滿足輕量級(jí)開發(fā)的要求。目前遵循ORM規(guī)范的產(chǎn)品很多,主要有:Hibernate,Entity EJB,Ibatis等,其中Hibernate是最流行的ORM開源框架。
它具有靈巧的設(shè)計(jì)、優(yōu)秀的性能、輕量的封裝以及良好的可擴(kuò)展性,是一個(gè)面向Java環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具。Hibernate允許程序設(shè)計(jì)中完全采用普通的Java對象作為持久化對象使用,并以XML結(jié)構(gòu)化文件配置Java類到數(shù)據(jù)庫表的映射。
它還提供了數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,大幅度地減少在開發(fā)時(shí)人工使用SQL和JDBC處理數(shù)據(jù)的時(shí)間,釋放了開發(fā)者95%的數(shù)據(jù)持久化的編程任務(wù)。
4 輕量級(jí)開發(fā)的應(yīng)用整合
在輕量級(jí)框架機(jī)制中,開發(fā)者可以隨意地選擇使用自己熟練或喜歡的開發(fā)技術(shù)進(jìn)行整合。以Spring為容器,利用其工廠模式以組件的形式把Web層的Struts框架、數(shù)據(jù)持久層的Hibernate整合在一起,是實(shí)現(xiàn)網(wǎng)絡(luò)信息系統(tǒng)輕量架構(gòu)和快速開發(fā)的一種方案。在實(shí)際應(yīng)用中,Spring和Struts都需要在Web啟動(dòng)時(shí)進(jìn)行加載。作為后臺(tái)服務(wù),Spring負(fù)責(zé)組件的管理和依賴注入,Struts自動(dòng)攔截客戶端的請求并控制請求的轉(zhuǎn)發(fā)和處理,實(shí)現(xiàn)2種服務(wù)的協(xié)同工作有2種策略:
(1) Struts的業(yè)務(wù)控制器Action把請求轉(zhuǎn)發(fā)給Spring容器中的bean處理。
(2) 讓Struts的系統(tǒng)控制器ActionServlet將攔截到的客戶請求直接轉(zhuǎn)發(fā)給Spring容器中的bean進(jìn)行處理。
前者在實(shí)現(xiàn)Struts內(nèi)部映射的請求轉(zhuǎn)發(fā)后,還需要在Action中調(diào)用Spring的實(shí)例化接口WebApplicationContext獲取業(yè)務(wù)bean對請求進(jìn)行處理,這種方法不僅降低系統(tǒng)的工作效率,而且采用編碼的方式將兩者整合一起,代碼耦合較高。后者是在Struts-config.xml文件中配置Spring的控制器DelegatingRequestProcessor來代替Struts的業(yè)務(wù)控制器,并讓Struts的核心控制器ActionServlet,把請求直接映射到Spring容器中相應(yīng)的業(yè)務(wù)bean。這種方案避免了程序中顯式地定位工廠,即調(diào)用實(shí)例化接口,充分利用Spring的依賴注入的特性,是一種低侵入低代碼污染的整合方式。Hibernate通過SessionFactory實(shí)現(xiàn)與數(shù)據(jù)庫的連接。Spring與Hibernate的整合,把數(shù)據(jù)源從SessionFactory中獨(dú)立出來,都以bean的方式組織于Spring容器中進(jìn)行管理。在實(shí)際的J2EE應(yīng)用中,當(dāng)建立數(shù)據(jù)會(huì)話時(shí),讓Spring采用注入依賴的方式把數(shù)據(jù)源傳遞給SessionFactory。這種與數(shù)據(jù)庫建立連接的方式可以實(shí)現(xiàn)同一應(yīng)用中對多個(gè)數(shù)據(jù)庫的操作。
其整合結(jié)構(gòu)和原理如圖2所示:
5 結(jié) 語
隨著企業(yè)信息化建設(shè)的高速發(fā)展,企業(yè)應(yīng)用系統(tǒng)不斷增加的需求給項(xiàng)目開發(fā)帶來了眾多的挑戰(zhàn)。如:必須在有限的時(shí)間和預(yù)算內(nèi)開發(fā)出有較高質(zhì)量保證的項(xiàng)目;項(xiàng)目要有很好的可維護(hù)性和擴(kuò)展性,能以較小的花費(fèi)和代價(jià)滿足不斷變化的即時(shí)需求;項(xiàng)目開發(fā)必須允許自由地選擇開發(fā)技術(shù)以及最大自由地采用新技術(shù)等。因此,企業(yè)網(wǎng)絡(luò)信息系統(tǒng)的輕量級(jí)開發(fā)具有時(shí)代意義。
參 考 文 獻(xiàn)
[1]李剛.輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2007.
[2]陳鵬,程勇.J2EE項(xiàng)目開發(fā)實(shí)用案例[M].北京:科學(xué)出版社,2006.
[3]Bruce Tate.Secrets of Lightweight Development Success[EB/OL].http://www.javafan.net,2007.
[4]孫衛(wèi)琴.精通Struts:基于MVC的JavaWeb設(shè)計(jì)與開發(fā)[M].北京:電子工業(yè)出版社,2005.
[5]楊濤,周志波.基于Struts和hibernate的J2EE快速開發(fā)框架的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2006,32(10):8385.
[6]黃永欣,周淑秋.用Spring搭建Web應(yīng)用的輕量級(jí)解決方案[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,17(1):189192.
[7]夏昕.Spring開發(fā)指南[EB/OL].http://www.xiaxin.net/spring_dev/,2005.
[8]孫衛(wèi)琴.精通Hibernate:Java對象持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2005.
[9]hibernate-reference-zh-cn-2.1.2[EB/OL],http://www.hibernate.org,2005.
[10]Rod Johnson,Juergen Hoeller.Spring2.0-reference[EB/OL].http://www.springframework.com,2006.
作者簡介 王 彤 女,1969年出生,西安人,講師。主要從事網(wǎng)絡(luò)信息技術(shù)、數(shù)據(jù)庫等計(jì)算機(jī)應(yīng)用技術(shù)方面的研究。
陳 靈 男,1969年出生,西安人,研究生。研究方向?yàn)榫W(wǎng)絡(luò)信息系統(tǒng)