Framework
整個或部分系統的可重用設計
Framework是整個或部分系統的可重用設計,表現為一組抽象構件及構件實例間交互的方法;另一種定義認為,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的方面給出的定義。可以說,一個框架是一個可復用的設計構件,它規定了應用的體系結構,闡明了整個設計、協作構件之間的依賴關係、責任分配和控制流程,表現為一組抽象類以及其實例之間協作的方法,它為構件復用提供了上下文(Context)關係。
Framework
應用框架的概念也很簡單。它並不是包含構件應用程序的小片程序,而是實現了某應用領域通用完備功能(除去特殊應用的部分)的底層服務。使用這種框架的編程人員可以在一個通用功能已經實現的基礎上開始具體的系統開發。框架提供了所有應用期望的默認行為的類集合。具體的應用通過重寫子類(該子類屬於框架的默認行為)或組裝對象來支持應用專用的行為。
應用框架強調的是軟體的設計重用性和系統的可擴充性,以縮短大型應用軟體系統的開發周期,提高開發質量。與傳統的基於類庫的面向對象重用技術比較,應用框架更注重於面向專業領域的軟體重用。應用框架具有領域相關性,構件根據框架進行複合而生成可運行的系統。框架的粒度越大,其中包含的領域知識就更加完整。
框架,即framework。其實就是某種應用的半成品,就是一組組件,供你選用完成你自己的系統。簡單說就是使用別人搭好的舞台,你來做表演。而且,框架一般是成熟的,不斷升級的軟體。
框架的概念最早起源於Smalltalk環境,其中最著名的框架是Smalltalk80的用戶界面框架MVC(Model-View-Controller)。隨著用戶界面框架Interviews【Linton89】和ET++【Weinand89】的開發和發布,框架研究越來越受到研究人員的重視。雖然框架研究最初起源於用戶界面領域,但它還被成功地應用到其他領域中,如操作系統【Russo90】、火警系統【Molin96a,Molin96b】等。Taligent公司於1992年成立后,框架研究受到了廣泛的重視。該公司計劃基於框架來開發一個完整的面向對象操作系統。另外,該公司還發布了一套支持快速應用開發的工具集CommonPoint,其中包括了上百個面向對象框架【Andert94,Cotter95】。
框架目前還沒有統一的定義,其中RalphJohnson所給出的定義基本上為大多數研究人員所接受:一個框架是一個可復用設計,它是由一組抽象類及其實例間協作關係來表達的【Johnson98】。這個定義是從框架內涵的角度來定義框架的,當然也可以從框架用途的角度來給出框架的定義:一個框架是在一個給定的問題領域內,一個應用程序的一部分設計與實現【Bosch97】。
從以上兩個定義可以看出,框架是對特定應用領域中的應用系統的部分設計和實現,它定義了一類應用系統(或子系統)的整體結構。框架將應用系統劃分為類和對象,定義類和對象的責任,類和對象如何互相協作,以及對象之間的控制線程。這些共有的設計因素由框架預先定義,應用開發人員只須關注於特定的應用系統特有部分。框架刻畫了其應用領域所共有的設計決策,所以說框架著重於設計復用,儘管框架中可能包含用某種程序設計語言實現的具體類。
一個基於框架開發的應用系統包含一個或多個框架,與框架相關的構件類,以及與應用系統相關的功能擴展。與應用系統相關的擴展包括與應用系統相關的類??一部分,或者說,它可能需要對框架進行一些適應性修改,以滿足系統需求。
面向對象的框架作為一種可復用的軟體,在基於框架的軟體開發過程中會涉及到框架的開發和利用兩個方面的工作。框架的開發階段在於產生領域中可復用的設計。該階段的主要結果是框架以及與框架相關的構件類。該階段的一個重要活動是框架的演變和維護。象所有軟體一樣,框架也易於變化。產生變化的原因很多,如應用出錯,業務領域變化,等等。
不論是哪一種技術,最終都是為業務發展而服務的。從業務的角度來講。首先,框架的是為了企業的業務發展和戰略規劃而服務的,他服從於企業的願景(vision);其次,框架最重要的目標是提高企業的競爭能力,包括降低成本、提高質量、改善客戶滿意程度,控制進度等方面。最後,框架實現這一目標的方式是進行有效的知識積累。軟體開發是一種知識活動,因此知識的聚集和積累是至關重要的。框架能夠採用一種結構化的方式對某個特定的業務領域進行描述,也就是將這個領域相關的技術以代碼、文檔、模型等方式固化下來。
Framework
要理解這一點,我們來舉一些例子:一個做視頻流應用的軟體企業,他為電廣行業提供整體的解決方案。他的優勢在於將各種各樣的視頻硬體、伺服器、和管理結合起來,因此他扮演的是一個集成商的角色。因此他的核心價值在於使用軟體技術將不同的硬體整合起來,並在硬體的整合層面上提供一個統一的管理平台。所以他的精力應該放在解決兩個問題:如何找到一種方法,將不同的硬體整合起來,注意,這裡的整合併不是技術整合,而是一種思路上的整合。首先要考慮的絕對不是要使用什麼技術,而是這些硬體需要提供哪些服務,需要以什麼樣的方式進行管理。因此,這時候做的事情實際上是對領域進行建模。例如,我們定義任何一種硬體都需要提供兩種能力,一種是統一的管理介面,用於對所有硬體統一管理;另一種是服務介面,系統平台可以查詢硬體所能夠提供的服務,並調用這些服務。所以,設計的規範將會針對兩種能力進行。
另一個問題是如何描述這個管理系統的規範。你需要描述各種管理活動,以及管理中所涉及的不同實體。因為管理系統是針對硬體的管理,所以它是構架在硬體整合平台之上的。
在完成業務層面的設計之後,我們再來看看具體的技術實現。光有規範和設計是不夠的,我們還需要選擇一個優秀的技術。由於是對不同硬體的整合,我們想到採用Java提供的JMX技術。JMX技術適合用來進行系統整合,它定義了一個通用的規範,並給出了遠程管理埠的一些默認實現。JMX已經經過了實踐的檢驗,不少的應用伺服器都採用了以JMX為基礎的結構,例如有名的JBoss。JMX已經是一個很好的開始了,但是我們還需要在JMX的基礎上再做一些工作。
什麼要用框架?
因為軟體系統發展到今天已經很複雜了,特別是伺服器端軟體,設計到的知識,內容,問題太多。在某些方面使用別人成熟的框架,就相當於讓別人幫你完成一些基礎工作,你只需要集中精力完成系統的業務邏輯設計。而且框架一般是成熟,穩健的,他可以處理系統很多細節問題,比如,事物處理,安全性,數據流控制等問題。還有框架一般都經過很多人使用,所以結構很好,所以擴展性也很好,而且它是不斷升級的,你可以直接享受別人升級代碼帶來的好處。框架一般處在低層應用平台(如J2EE)和高層業務邏輯之間的中間層。
軟體為什麼要分層?為了實現“高內聚、低耦合”。把問題劃分開來各個解決,易於控制,易於延展,易於分配資源…總之好處很多啦)。
為什麼要進行框架開發?
Framework
框架還能重用分析。所有的人員若按照框架的思想來分析事務,那麼就能將它劃分為同樣的構件,採用相似的解決方法,從而使採用同一框架的分析人員之間能進行溝通。採用框架技術進行軟體開發的主要特點包括:領域內的軟體結構一致性好;建立更加開放的系統;重用代碼大大增加,軟體生產效率和質量也得到了提高;軟體設計人員要專註於對領域的了解,使需求分析更充分;存儲了經驗,可以讓那些經驗豐富的人員去設計框架和領域構件,而不必限於低層編程;允許採用快速原型技術;有利於在一個項目內多人協同工作;大粒度的重用使得平均開發費用降低,開發速度加快,開發人員減少,維護費用降低,而參數化框架使得適應性、靈活性增強。
與框架相關的概念
1.白盒與黑盒框架
框架可分為白盒(White-Box)與黑盒(Black-Box)兩種框架。基於繼承的框架被稱為白盒框架。所謂白盒即具備可視性,被繼承的父類的內部實現細節對子類而言都是可知的。利用白盒框架的應用開發者通過衍生子類或重寫父類的成員方法來開發系統。子類的實現很大程度上依賴於父類的實現,這種依賴性限制了重用的靈活性和完全性。但解決這種局限性的方法可以是只繼承抽象父類,因為抽象類基本上不提供具體的實現。白盒框架是一個程序骨架,而用戶衍生出的子類是這個骨架上的附屬品。
基於對象構件組裝的框架就是黑盒框架。應用開發者通過整理、組裝對象來獲得系統的實現。用戶只須了解構件的外部介面,無須了解內部的具體實現。另外,組裝比繼承更為靈活,它能動態地改變,繼承只是一個靜態編譯時的概念。
在理想情況下,任何所需的功能都可通過組裝已有的構件得到,事實上可獲得的構件遠遠不能滿足需求,有時通過繼承獲得新的構件比利用已有構件組裝新構件更容易,因此白盒和黑盒將同時應用於系統的開發中。不過白盒框架趨向於向黑盒框架發展,黑盒框架也是系統開發希望達到的理想目標。
2.熱點、食譜以及好萊塢原則成功的框架開發需要確定領域專用的“熱點”(Hotspot)。應用開發者在框架的基礎上進行開發,只須擴展框架的某些部分,“熱點”就是在應用領域的一種擴展槽,開發者根據自己的需要填充這些擴展槽。“熱點”使框架具有靈活性,如在具體的實現中,擴展槽可以被看成是一些抽象類,開發者通過重寫抽象方法獲得具體實現。“食譜”(Cookbook)就是描述如何使用框架方法的文檔。在“食譜”中包含了許多“烹飪”方法,這些“烹飪”方法相當於一些具體的操作步驟,描述了為解決某一專門問題如何使用框架的詳細方法。框架的內部設計和實現細節通常不出現在“食譜”中。框架的一個重要特徵就是用戶定義的方法經常被框架自身調用,而不是從用戶的應用代碼中調用。這種機制常稱為“好萊塢原則”(HollywoodPrinciple)或“別調用我們,我們會調用您”。
WAF:
全稱:WEBAPPLICATIONFRAMEWORK
主要應用方面:EJB層,(WEB層也有,但是比較弱)。
主要應用技術:EJB等
出處:java.sun.com/blueprints/code/index.html">http://java.sun.com/blueprints/code/index.html
簡述:這是SUN在展示J2EE平台時所用的例子PetStore(寵物商店系統)裡面的框架。是SUN藍皮書例子程序中提出的應用框架。它實現了MVC和其他良好的設計模式。SUN的網站上有技術資料,最好下載PetStore來研究,WEBLOGIC里自帶此系統,源碼在bea\weblogic700\samples\server\src\petstore。這是學習了解J2EE的首選框架。
免費。
Struts:
主要應用方面:WEB層。
主要應用技術:JSP,TagLib,JavaBean,XML等
出處:http://jakarta.apache.org/struts/index.html
簡述:這是APACHE的開源項目,目前應用很廣泛。基於MVC模式,結構很好,基於JSP。Jbuilder8里已經集成了STRUTS1.02的製作。
免費。
簡述WAF+STRUTS結合的例子:WEB層用STRUTS,EJB層用WAF:JSP(TagLib)——>ActionForm——>Action——>Event——>EJBAction——>EJB——>DAO——>DatabaseJSP(TagLib)(forward)<——Action<——EventResponse<
主要應用方面:WEB層。
主要應用技術:servlet等
出處:http://jakarta.apache.org/turbine/index.html
簡述:這是APACHE的開源項目。基於SERVLET。據說速度比較快,)的方式提供各種服務。
免費。
主要應用方面:WEB層。
主要應用技術:XML,XSP,servlet等
出處:http://cocoon.apache.org/2.0/
簡述:這是APACHE的一個開源項目。基於XML,基於XSP(通俗地說,XSP是在XML靜態文檔中加入Java程序段后形成的動態XML文檔。)。特點是可以與多種數據源交互,包括文件系統,資料庫,LDAP,XML資源庫,網路數據源等。
免費。
Framework
主要應用技術:servlet等
出處:http://www.nextapp.com/products/echo/
簡述:nextapp公司的一個開源項目。基於SERVLET。頁面可以做的很漂亮,結合echopoint,可以作出很多圖形效果(裡面用了jfreechart包)。使用SWING的思想來作網頁,把HTML當作JAVA的類來做。但是大量使用Session,頁面分幀(Frame)很多,系統資源消耗很大。
免費。
JATO:
全稱:SUNONEApplicationFramework
主要應用方面:WEB層。
主要應用技術:JSP,TagLib,JavaBean等
出處:http://www.sun.com/
簡述:這是SUN推出的一個商業性框架,一看名字就知道是結合SUNONE的平台推出的。我下載了JATO2.0看了一下,感覺有些簡單,使用了JSP+TagLib+JavaBean。如他的DOC所說JATO是適合用在小的WEB應用里。
免費。
TCF:
全稱:Thin-ClientFramework
主要應用方面:JAVAGUI。
主要應用技術:JAVAapplication等
出處:http://www.alphaworks.ibm.com/tech/tcf
簡述:這是IBM出的一個框架。基於MVC模式,基於JAVAApplication。推薦一篇介紹文章:java/j-tcf1/index.shtml">http://www-900.ibm.com/developerWorks/cn/java/j-tcf1/index.shtml
收費:每個企業對象license:2000美元。