軟件工程中的框架

什麼是框架

框架( Framework )是構成一類特定軟件可複用設計的一組相互協作的類。框架規定了你的應用的體系結構。它定義了整體結構,類和對象的分割,各部分的主要責任,類和對象怎麼協作,以及控制流程。框架預定義了這些設計參數,以便於應用設計者或實現者能集中精力於應用本身的特定細節

爲什麼要用框架

因爲軟件系統發展到今天已經很複雜了,特別是服務器端軟件,涉及到的知識,內容,問題太多。在某些方面使用別人成熟的框架,就相當於讓別人幫你完成一些基礎工作,你只需要集中精力完成系統的業務邏輯設計。而且框架一般是成熟,穩健的,他可以處理系統很多細節問題,比如,事務處理,安全性,數據流控制等問題。還有框架一般都經過很多人使用,所以結構很好,所以擴展性也很好,而且它是不斷升級的,你可以直接享受別人升級代碼帶來的好處。
框架一般處在低層應用平臺(如J2EE)和高層業務邏輯之間的中間層。
軟件爲什麼要分層? 爲了實現“高內聚、低耦合”。把問題劃分開來各個解決,易於控制,易於延展,易於分配資源…總之好處很多啦。

框架和設計模式

框架、設計模式這兩個概念總容易被混淆,其實它們之間還是有區別的。構件通常是代碼重用,而設計模式是設計重用,框架則介於兩者之間,部分代碼重用,部分設計重用,有時分析也可重用。在軟件生產中有三種級別的重用:內部重用,即在同一應用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應用和領域都能使用;應用框架的重用,即爲專用領域提供通用的或現成的基礎結構,以獲得最高級別的重用性。
框架與設計模式雖然相似,但卻有着根本的不同。設計模式是對在某種環境中反覆出現的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執行或複用,而對模式而言只有實例才能用代碼表示;設計模式是比框架更小的元素,一個框架中往往含有一個或多個設計模式,框架總是針對某一特定應用領域,但同一模式卻可適用於各種應用。可以說,框架是軟件,而設計模式是軟件的知識。

框架開發

框架的最大好處就是重用。面向對象系統獲得的最大的複用方式就是框架,一個大的應用系統往往可能由多層互相協作的框架組成。
由於框架能重用代碼,因此從一已有構件庫中建立應用變得非常容易,因爲構件都採用框架統一定義的接口,從而使構件間的通信簡單。
框架能重用設計。它提供可重用的抽象算法及高層設計,並能將大系統分解成更小的構件,而且能描述構件間的內部接口。這些標準接口使在已有的構件基礎上通過組裝建立各種各樣的系統成爲可能。只要符合接口定義,新的構件就能插入框架中,構件設計者就能重用構架的設計。
框架還能重用分析。所有的人員若按照框架的思想來分析事務,那麼就能將它劃分爲同樣的構件,採用相似的解決方法,從而使採用同一框架的分析人員之間能進行溝通。

主要特點

領域內的軟件結構一致性好; 建立更加開放的系統;
重用代碼大大增加,軟件生產效率和質量也得到了提高;
軟件設計人員要專注於對領域的瞭解,使需求分析更充分;
存儲了經驗,可以讓那些經驗豐富的人員去設計框架和領域構件,而不必限於低層編程;
允許採用快速原型技術;
有利於在一個項目內多人協同工作;
大力度的重用使得平均開發費用降低,開發速度加快,開發人員減少,維護費用降低,而參數化框架使得適應性、靈活性增強。

解決問題

框架要解決的最重要的一個問題是技術整合的問題,在J2EE的框架中,有着各種各樣的技術,不同的軟件企業需要從J2EE中選擇不同的技術,這就使得軟件企業最終的應用依賴於這些技術,技術自身的複雜性和技術的風險性將會直接對應用造成衝擊。而應用是軟件企業的核心,是競爭力的關鍵所在,因此應該將應用自身的設計和具體的實現技術解耦。這樣,軟件企業的研發將集中在應用的設計上,而不是具體的技術實現,技術實現是應用的底層支撐,它不應該直接對應用產生影響。 要理解這一點,我們來舉一些例子:
一個做視頻流應用的軟件企業,他爲電廣行業提供整體的解決方案。他的優勢在於將各種各樣的視頻硬件、服務器、和管理結合起來,因此他扮演的是一個集成商的角色。因此他的核心價值在於使用軟件技術將不同的硬件整合起來,並在硬件的整合層面上提供一個統一的管理平臺。所以他的精力應該放在解決兩個問題:
如何找到一種方法,將不同的硬件整合起來,注意,這裏的整合並不是技術整合,而是一種思路上的整合。首先要考慮的絕對不是要使用什麼技術,而是這些硬件需要提供哪些服務,需要以什麼樣的方式進行管理。因此,這時候做的事情實際上是對領域進行建模。例如,我們定義任何一種硬件都需要提供兩種能力,一種是統一的管理接口,用於對所有硬件統一管理;另一種是服務接口,系統平臺可以查詢硬件所能夠提供的服務,並調用這些服務。所以,設計的規範將會針對兩種能力進行。
另一個問題是如何描述這個管理系統的規範。你需要描述各種管理活動,以及管理中所涉及的不同實體。因爲管理系統是針對硬件的管理,所以它是構架在硬件整合平臺之上的。
在完成業務層面的設計之後,我們再來看看具體的技術實現。光有規範和設計是不夠的,我們還需要選擇一個優秀的技術。由於是對不同硬件的整合,我們想到採用Java提供的JMX技術。JMX技術適合用來進行系統整合,它定義了一個通用的規範,並給出了遠程管理端口的一些默認實現。JMX已經經過了實踐的檢驗,不少的應用服務器都採用了以JMX爲基礎的結構,例如有名的JBoss。JMX已經是一個很好的開始了,但是我們還需要在JMX的基礎上再做一些工作。

相關概念

1. 白盒與黑盒框架

框架可分爲白盒(White-Box)與黑盒(Black-Box)兩種框架。
基於繼承的框架被稱爲白盒框架。所謂白盒即具備可視性,被繼承的父類的內部實現細節對子類而言都是可知的。利用白盒框架的應用開發者通過衍生子類或重寫父類的成員方法來開發系統。子類的實現很大程度上依賴於父類的實現,這種依賴性限制了重用的靈活性和完全性。但解決這種侷限性的方法可以是隻繼承抽象父類,因爲抽象類基本上不提供具體的實現。白盒框架是一個程序骨架,而用戶衍生出的子類是這個骨架上的附屬品。
基於對象構件組裝的框架就是黑盒框架。應用開發者通過整理、組裝對象來獲得系統的實現。用戶只須瞭解構件的外部接口,無須瞭解內部的具體實現。另外,組裝比繼承更爲靈活,它能動態地改變,繼承只是一個靜態編譯時的概念。
在理想情況下,任何所需的功能都可通過組裝已有的構件得到,事實上可獲得的構件遠遠不能滿足需求,有時通過繼承獲得新的構件比利用已有構件組裝新構件更容易,因此白盒和黑盒將同時應用於系統的開發中。不過白盒框架趨向於向黑盒框架發展,黑盒框架也是系統開發希望達到的理想目標。

2. 熱點、食譜以及好萊塢原則

成功的框架開發需要確定領域專用的’‘熱點’’ (Hot spot)。應用開發者在框架的基礎上進行開發,只須擴展框架的某些部分,’‘熱點’‘就是在應用領域的一種擴展槽,開發者根據自己的需要填充這些擴展槽。’‘熱點’‘使框架具有靈活性,如在具體的實現中,擴展槽可以被看成是一些抽象類,開發者通過重寫抽象方法獲得具體實現。
‘‘食譜’’ (Cookbook)就是描述如何使用框架方法的文檔。在’‘食譜’‘中包含了許多’‘烹飪’‘方法,這些’‘烹飪’‘方法相當於一些具體的操作步驟,描述了爲解決某一專門問題如何使用框架的詳細方法。框架的內部設計和實現細節通常不出現在’‘食譜’'中。
框架的一個重要特徵就是用戶定義的方法經常被框架自身調用,而不是從用戶的應用代碼中調用。這種機制常稱爲“好萊塢原則”(Hollywood Principle)或“別調用我們,我們會調用您”。

JAVA框架

WAF:全稱:WEB APPLICATION FRAMEWORK主要應用方面: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等出處,這是APACHE的開源項目,應用很廣泛。基於MVC模式,結構很好,基於JSP。Jbuilder8裏已經集成了STRUTS1.02的製作。免費。
簡述WAF+STRUTS結合的例子:WEB層用STRUTS,EJB層用WAF:JSP(TagLib)——>ActionForm——>Action ——> Event——>EJBAction——>EJB ——>DAO——>Database JSP(TagLib) (forward) <——Action <——EventResponse<——
Turbine:主要應用方面:WEB層。主要應用技術:servlet等出處,這是APACHE的開源項目。基於SERVLET。據說速度比較快,基於service(pluggable implementation可插拔的執行組件)的方式提供各種服務。免費。
COCOON:主要應用方面:WEB層。主要應用技術:XML,XSP,servlet等出處:http://cocoon.apache. org/2.0/簡述:這是APACHE的一個開源項目。基於XML,基於XSP(通俗地說,XSP是在XML靜態文檔中加入Java程序段後形成的動態XML文檔。)。特點是可以與多種數據源交互,包括文件系統,數據庫,LDAP,XML資源庫,網絡數據源等。免費。
ECHO:主要應用方面:WEB層。主要應用技術:servlet等出處:http://www.nextapp. com/products/echo/簡述:nextapp公司的一個開源項目。基於SERVLET。頁面可以做的很漂亮,結合echopoint,可以作出很多圖形效果(裏面用了jfreechart包)。使用SWING的思想來作網頁,把HTML當作JAVA的類來做。但是大量使用Session,頁面分幀(Frame)很多,系統資源消耗很大。免費。
JATO:全稱:SUN ONE Application Framework主要應用方面:WEB層。主要應用技術:JSP,TagLib,JavaBean等出處,簡述:這是SUN推出的一個商業性框架,一看名字就知道是結合SUN ONE的平臺推出的。我下載了JATO2.0看了一下,感覺有些簡單,使用了JSP+TagLib+JavaBean。如他的DOC所說JATO是適合用在小的WEB應用裏。免費。
TCF:全稱:Thin-Client Framework主要應用方面:JAVA GUI。主要應用技術:JAVA application等出處,簡述:這是IBM出的一個框架。基於MVC模式,基於JAVA Application。推薦一篇介紹文章:java/j-tcf1/index.shtml">http://www-900.ibm. com/developerWorks/cn/java/j-tcf1/index.shtml收費:每個企業對象license:2000美元。

發佈了47 篇原創文章 · 獲贊 77 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章