框架(Framework)是整個(gè)或部分系統的可重用設計,表現為一組抽象構件及構件實(shí)例間交互的方法;另一種定義認為,框架是可被應用開(kāi)發(fā)者定制的應用骨架。前者是從應用方面而后者是從目的方面給出的定義。
可以說(shuō),一個(gè)框架是一個(gè)可復用的設計構件,它規定了應用的體系結構,闡明了整個(gè)設計、協(xié)作構件之間的依賴(lài)關(guān)系、責任分配和控制流程,表現為一組抽象類(lèi)以及其實(shí)例之間協(xié)作的方法,它為構件復用提供了上下文(Context)關(guān)系。因此構件庫的大規模重用也需要框架。
構件領(lǐng)域框架方法在很大程度上借鑒了硬件技術(shù)發(fā)展的成就,它是構件技術(shù)、軟件體系結構研究和應用軟件開(kāi)發(fā)三者發(fā)展結合的產(chǎn)物。在很多情況下,框架通常以構件庫的形式出現,但構件庫只是框架的一個(gè)重要部分??蚣艿年P(guān)鍵還在于框架內對象間的交互模式和控制流模式。
框架比構件可定制性強。在某種程度上,將構件和框架看成兩個(gè)不同但彼此協(xié)作的技術(shù)或許更好??蚣転闃嫾峁┲赜玫沫h(huán)境,為構件處理錯誤、交換數據及激活操作提供了標準的方法。
應用框架的概念也很簡(jiǎn)單。它并不是包含構件應用程序的小片程序,而是實(shí)現了某應用領(lǐng)域通用完備功能(除去特殊應用的部分)的底層服務(wù)。使用這種框架的編程人員可以在一個(gè)通用功能已經(jīng)實(shí)現的基礎上開(kāi)始具體的系統開(kāi)發(fā)??蚣芴峁┝怂袘闷谕哪J行為的類(lèi)集合。具體的應用通過(guò)重寫(xiě)子類(lèi)(該子類(lèi)屬于框架的默認行為)或組裝對象來(lái)支持應用專(zhuān)用的行為。
應用框架強調的是軟件的設計重用性和系統的可擴充性,以縮短大型應用軟件系統的開(kāi)發(fā)周期,提高開(kāi)發(fā)質(zhì)量。與傳統的基于類(lèi)庫的面向對象重用技術(shù)比較,應用框架更注重于面向專(zhuān)業(yè)領(lǐng)域的軟件重用。應用框架具有領(lǐng)域相關(guān)性,構件根據框架進(jìn)行復合而生成可運行的系統??蚣艿牧6仍酱?,其中包含的領(lǐng)域知識就更加完整。
框架,即frAMework。其實(shí)就是某種應用的半成品,就是一組組件,供你選用完成你自己的系統。簡(jiǎn)單說(shuō)就是使用別人搭好的舞臺,你來(lái)做表演。而且,框架一般是成熟的,不斷升級的軟件。
框架的概念最早起源于Smalltalk環(huán)境,其中最著(zhù)名的框架是Smalltalk 80的用戶(hù)界面框架MVC(Model-View-Controller)。隨著(zhù)用戶(hù)界面框架Interviews [Linton 89]和ET++ [Weinand 89] 的開(kāi)發(fā)和發(fā)布,框架研究越來(lái)越受到研究人員的重視。雖然框架研究最初起源于用戶(hù)界面領(lǐng)域,但它還被成功地應用到其他領(lǐng)域中,如操作系統 [Russo 90]、火警系統 [Molin 96a,Molin 96b] 等。Taligent公司于1992年成立后,框架研究受到了廣泛的重視。該公司計劃基于框架來(lái)開(kāi)發(fā)一個(gè)完整的面向對象操作系統。另外,該公司還發(fā)布了一套支持快速應用開(kāi)發(fā)的工具集CommonPoint,其中包括了上百個(gè)面向對象框架 [Andert 94,Cotter 95]。
框架目前還沒(méi)有統一的定義,其中Ralph Johnson所給出的定義基本上為大多數研究人員所接受:
一個(gè)框架是一個(gè)可復用設計,它是由一組抽象類(lèi)及其實(shí)例間協(xié)作關(guān)系來(lái)表達的 [Johnson 98]。
這個(gè)定義是從框架內涵的角度來(lái)定義框架的,當然也可以從框架用途的角度來(lái)給出框架的定義:
一個(gè)框架是在一個(gè)給定的問(wèn)題領(lǐng)域內,一個(gè)應用程序的一部分設計與實(shí)現[BOSch 97]。
從以上兩個(gè)定義可以看出,框架是對特定應用領(lǐng)域中的應用系統的部分設計和實(shí)現,它定義了一類(lèi)應用系統(或子系統)的整體結構??蚣軐孟到y劃分為類(lèi)和對象,定義類(lèi)和對象的責任,類(lèi)和對象如何互相協(xié)作,以及對象之間的控制線(xiàn)程。這些共有的設計因素由框架預先定義,應用開(kāi)發(fā)人員只須關(guān)注于特定的應用系統特有部分??蚣芸坍?huà)了其應用領(lǐng)域所共有的設計決策,所以說(shuō)框架著(zhù)重于設計復用,盡管框架中可能包含用某種程序設計語(yǔ)言實(shí)現的具體類(lèi)。
一個(gè)基于框架開(kāi)發(fā)的應用系統包含一個(gè)或多個(gè)框架,與框架相關(guān)的構件類(lèi),以及與應用系統相關(guān)的功能擴展。與應用系統相關(guān)的擴展包括與應用系統相關(guān)的類(lèi)和對象。應用系統可能僅僅復用了面向對象框架的一部分,或者說(shuō),它可能需要對框架進(jìn)行一些適應性修改,以滿(mǎn)足系統需求。
面向對象的框架作為一種可復用的軟件,在基于框架的軟件開(kāi)發(fā)過(guò)程中會(huì )涉及到框架的開(kāi)發(fā)和利用兩個(gè)方面的工作??蚣艿拈_(kāi)發(fā)階段在于產(chǎn)生領(lǐng)域中可復用的設計。該階段的主要結果是框架以及與框架相關(guān)的構件類(lèi)。該階段的一個(gè)重要活動(dòng)是框架的演變和維護。象所有軟件一樣,框架也易于變化。產(chǎn)生變化的原因很多,如應用出錯,業(yè)務(wù)領(lǐng)域變化,等等。
不論是哪一種技術(shù),最終都是為業(yè)務(wù)發(fā)展而服務(wù)的。從業(yè)務(wù)的角度來(lái)講。首先,框架的是為了企業(yè)的業(yè)務(wù)發(fā)展和戰略規劃而服務(wù)的,他服從于企業(yè)的愿景(vision);其次,框架最重要的目標是提高企業(yè)的競爭能力,包括降低成本、提高質(zhì)量、改善客戶(hù)滿(mǎn)意程度,控制進(jìn)度等方面。最后,框架實(shí)現這一目標的方式是進(jìn)行有效的知識積累。軟件開(kāi)發(fā)是一種知識活動(dòng),因此知識的聚集和積累是至關(guān)重要的??蚣苣軌虿捎靡环N結構化的方式對某個(gè)特定的業(yè)務(wù)領(lǐng)域進(jìn)行描述,也就是將這個(gè)領(lǐng)域相關(guān)的技術(shù)以代碼、文檔、模型等方式固化下來(lái)。
一、框架要解決的問(wèn)題
框架要解決的最重要的一個(gè)問(wèn)題是技術(shù)整合的問(wèn)題,在J2EE的框架中,有著(zhù)各種各樣的技術(shù),不同的軟件企業(yè)需要從J2EE中選擇不同的技術(shù),這就使得軟件企業(yè)最終的應用依賴(lài)于這些技術(shù),技術(shù)自身的復雜性和技術(shù)的風(fēng)險性將會(huì )直接對應用造成沖擊。而應用是軟件企業(yè)的核心,是競爭力的關(guān)鍵所在,因此應該將應用自身的設計和具體的實(shí)現技術(shù)解耦。這樣,軟件企業(yè)的研發(fā)將集中在應用的設計上,而不是具體的技術(shù)實(shí)現,技術(shù)實(shí)現是應用的底層支撐,它不應該直接對應用產(chǎn)生影響。
要理解這一點(diǎn),我們來(lái)舉一些例子:
一個(gè)做視頻流應用的軟件企業(yè),他為電廣行業(yè)提供整體的解決方案。他的優(yōu)勢在于將各種各樣的視頻硬件、服務(wù)器、和管理結合起來(lái),因此他扮演的是一個(gè)集成商的角色。因此他的核心價(jià)值在于使用軟件技術(shù)將不同的硬件整合起來(lái),并在硬件的整合層面上提供一個(gè)統一的管理平臺。所以他的精力應該放在解決兩個(gè)問(wèn)題:
如何找到一種方法,將不同的硬件整合起來(lái),注意,這里的整合并不是技術(shù)整合,而是一種思路上的整合。首先要考慮的絕對不是要使用什么技術(shù),而是這些硬件需要提供哪些服務(wù),需要以什么樣的方式進(jìn)行管理。因此,這時(shí)候做的事情實(shí)際上是對領(lǐng)域進(jìn)行建模。例如,我們定義任何一種硬件都需要提供兩種能力,一種是統一的管理接口,用于對所有硬件統一管理;另一種是服務(wù)接口,系統平臺可以查詢(xún)硬件所能夠提供的服務(wù),并調用這些服務(wù)。所以,設計的規范將會(huì )針對兩種能力進(jìn)行。
另一個(gè)問(wèn)題是如何描述這個(gè)管理系統的規范。你需要描述各種管理活動(dòng),以及管理中所涉及的不同實(shí)體。因為管理系統是針對硬件的管理,所以它是構架在硬件整合平臺之上的。
在完成業(yè)務(wù)層面的設計之后,我們再來(lái)看看具體的技術(shù)實(shí)現。光有規范和設計是不夠的,我們還需要選擇一個(gè)優(yōu)秀的技術(shù)。由于是對不同硬件的整合,我們想到采用Java提供的JMX技術(shù)。JMX技術(shù)適合用來(lái)進(jìn)行系統整合,它定義了一個(gè)通用的規范,并給出了遠程管理端口的一些默認實(shí)現。JMX已經(jīng)經(jīng)過(guò)了實(shí)踐的檢驗,不少的應用服務(wù)器都采用了以JMX為基礎的結構,例如有名的JBOss。JMX已經(jīng)是一個(gè)很好的開(kāi)始了,但是我們還需要在JMX的基礎上再做一些工作。
二、什么要用框架?
因為軟件系統發(fā)展到今天已經(jīng)很復雜了,特別是服務(wù)器端軟件,設計到的知識,內容,問(wèn)題太多。在某些方面使用別人成熟的框架,就相當于讓別人幫你完成一些基礎工作,你只需要集中精力完成系統的業(yè)務(wù)邏輯設計。而且框架一般是成熟,穩健的,他可以處理系統很多細節問(wèn)題,比如,事物處理,安全性,數據流控制等問(wèn)題。還有框架一般都經(jīng)過(guò)很多人使用,所以結構很好,所以擴展性也很好,而且它是不斷升級的,你可以直接享受別人升級代碼帶來(lái)的好處。
框架一般處在低層應用平臺(如J2EE)和高層業(yè)務(wù)邏輯之間的中間層。
軟件為什么要分層?
為了實(shí)現“高內聚、低耦合”。把問(wèn)題劃分開(kāi)來(lái)各個(gè)解決,易于控制,易于延展,易于分配資源…總之好處很多啦:)。
三、為什么要進(jìn)行框架開(kāi)發(fā)?
框架的最大好處就是重用。面向對象系統獲得的最大的復用方式就是框架,一個(gè)大的應用系統往往可能由多層互相協(xié)作的框架組成。
由于框架能重用代碼,因此從一已有構件庫中建立應用變得非常容易,因為構件都采用框架統一定義的接口,從而使構件間的通信簡(jiǎn)單。
框架能重用設計。它提供可重用的抽象算法及高層設計,并能將大系統分解成更小的構件,而且能描述構件間的內部接口。這些標準接口使在已有的構件基礎上通過(guò)組裝建立各種各樣的系統成為可能。只要符合接口定義,新的構件就能插入框架中,構件設計者就能重用構架的設計。
框架還能重用分析。所有的人員若按照框架的思想來(lái)分析事務(wù),那么就能將它劃分為同樣的構件,采用相似的解決方法,從而使采用同一框架的分析人員之間能進(jìn)行溝通。
采用框架技術(shù)進(jìn)行軟件開(kāi)發(fā)的主要特點(diǎn)包括:
領(lǐng)域內的軟件結構一致性好;
建立更加開(kāi)放的系統;
重用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;
軟件設計人員要專(zhuān)注于對領(lǐng)域的了解,使需求分析更充分;
存儲了經(jīng)驗,可以讓那些經(jīng)驗豐富的人員去設計框架和領(lǐng)域構件,而不必限于低層編程;
允許采用快速原型技術(shù);
有利于在一個(gè)項目?jì)榷嗳藚f(xié)同工作;
大粒度的重用使得平均開(kāi)發(fā)費用降低,開(kāi)發(fā)速度加快,開(kāi)發(fā)人員減少,維護費用降低,而參數化框架使得適應性、靈活性增強。
四、與框架相關(guān)的概念
1. 白盒與黑盒框架
框架可分為白盒(White-Box)與黑盒(Black-Box)兩種框架。
基于繼承的框架被稱(chēng)為白盒框架。所謂白盒即具備可視性,被繼承的父類(lèi)的內部實(shí)現細節對子類(lèi)而言都是可知的。利用白盒框架的應用開(kāi)發(fā)者通過(guò)衍生子類(lèi)或重寫(xiě)父類(lèi)的成員方法來(lái)開(kāi)發(fā)系統。子類(lèi)的實(shí)現很大程度上依賴(lài)于父類(lèi)的實(shí)現,這種依賴(lài)性限制了重用的靈活性和完全性。但解決這種局限性的方法可以是只繼承抽象父類(lèi),因為抽象類(lèi)基本上不提供具體的實(shí)現。白盒框架是一個(gè)程序骨架,而用戶(hù)衍生出的子類(lèi)是這個(gè)骨架上的附屬品。
基于對象構件組裝的框架就是黑盒框架。應用開(kāi)發(fā)者通過(guò)整理、組裝對象來(lái)獲得系統的實(shí)現。用戶(hù)只須了解構件的外部接口,無(wú)須了解內部的具體實(shí)現。另外,組裝比繼承更為靈活,它能動(dòng)態(tài)地改變,繼承只是一個(gè)靜態(tài)編譯時(shí)的概念。
在理想情況下,任何所需的功能都可通過(guò)組裝已有的構件得到,事實(shí)上可獲得的構件遠遠不能滿(mǎn)足需求,有時(shí)通過(guò)繼承獲得新的構件比利用已有構件組裝新構件更容易,因此白盒和黑盒將同時(shí)應用于系統的開(kāi)發(fā)中。不過(guò)白盒框架趨向于向黑盒框架發(fā)展,黑盒框架也是系統開(kāi)發(fā)希望達到的理想目標。
2. 熱點(diǎn)、食譜以及好萊塢原則
成功的框架開(kāi)發(fā)需要確定領(lǐng)域專(zhuān)用的“熱點(diǎn)” (Hot spot)。應用開(kāi)發(fā)者在框架的基礎上進(jìn)行開(kāi)發(fā),只須擴展框架的某些部分,“熱點(diǎn)”就是在應用領(lǐng)域的一種擴展槽,開(kāi)發(fā)者根據自己的需要填充這些擴展槽。“熱點(diǎn)”使框架具有靈活性,如在具體的實(shí)現中,擴展槽可以被看成是一些抽象類(lèi),開(kāi)發(fā)者通過(guò)重寫(xiě)抽象方法獲得具體實(shí)現。
“食譜” (COOkbook)就是描述如何使用框架方法的文檔。在“食譜”中包含了許多“烹飪”方法,這些“烹飪”方法相當于一些具體的操作步驟,描述了為解決某一專(zhuān)門(mén)問(wèn)題如何使用框架的詳細方法??蚣艿膬炔吭O計和實(shí)現細節通常不出現在“食譜”中。
框架的一個(gè)重要特征就是用戶(hù)定義的方法經(jīng)常被框架自身調用,而不是從用戶(hù)的應用代碼中調用。這種機制常稱(chēng)為“好萊塢原則”(HollywOOD Principle)或“別調用我們,我們會(huì )調用您”。
五、常見(jiàn)的JAVA框架有什么?
WAF:
全稱(chēng):WEB APPLICATION FRAMEWORK
主要應用方面:EJB層,(WEB層也有,但是比較弱)。
主要應用技術(shù):EJB等
出處:java.sun.com/blueprints/code/index.html">http://java.sun.com/blueprints/code/index.html
簡(jiǎn)述:這是SUN在展示J2EE平臺時(shí)所用的例子PetSTore(寵物商店系統)里面的框架。是SUN藍皮書(shū)例子程序中提出的應用框架。它實(shí)現了 MVC和其他良好的設計模式。SUN的網(wǎng)站上有技術(shù)資料,最好下載PetStore來(lái)研究,WEBLOGIC里自帶此系統,源碼在bea\weblogic700\SAmplES\server\src\petstore。這是學(xué)習了解J2EE的首選框架。
免費。
Struts:
主要應用方面:WEB層。
主要應用技術(shù):JSP,TagLib,JavaBean,XML等
出處:http://jakarta.apache.org/struts/index.html
簡(jiǎn)述:這是APACHE的開(kāi)源項目,目前應用很廣泛?;?a target="_new">MVC模式,結構很好,基于JSP。Jbuilder8里已經(jīng)集成了STRUTS1.02的制作。
免費。
簡(jiǎn)述WAF+STRUTS結合的例子:WEB層用STRUTS,EJB層用WAF:
JSP(TagLib)——>ActionFORM——>Action ——>
Event——>EJBAction——>EJB ——>DAO——>database
JSP(TagLib) (forward) <——Action <——EventResponse<——
TurBIn%
聯(lián)系客服