1. 程式人生 > >什麼是框架(包括前端框架和後端框架)

什麼是框架(包括前端框架和後端框架)

什麼是框架

框架(Framework)是整個或部分系統的可重用設計,表現為一組抽象構件及構件例項間互動的方法;另一種定義認為,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的方面給出的定義。
可以說,一個框架是一個可複用的設計構件,它規定了應用的體系結構,闡明瞭整個設計、協作構件之間的依賴關係、責任分配和控制流程,表現為一組抽象類以及其例項之間協作的方法,它為構件複用提供了上下文(Context)關係。因此構件庫的大規模重用也需要框架。
構件領域框架方法在很大程度上借鑑了硬體技術發展的成就,它是構件技術、軟體體系結構研究和應用軟體開發三者發展結合的產物。在很多情況下,框架通常以構件庫的形式出現,但構件庫只是框架的一個重要部分。框架的關鍵還在於框架內物件間的互動模式和控制流模式。


框架比構件可定製性強。在某種程度上,將構件和框架看成兩個不同但彼此協作的技術或許更好。框架為構件提供重用的環境,為構件處理錯誤、交換資料及啟用操作提供了標準的方法。
應用框架的概念也很簡單。它並不是包含構件應用程式的小片程式,而是實現了某應用領域通用完備功能(除去特殊應用的部分)的底層服務。使用這種框架的程式設計人員可以在一個通用功能已經實現的基礎上開始具體的系統開發。框架提供了所有應用期望的預設行為的類集合。具體的應用通過重寫子類(該子類屬於框架的預設行為)或組裝物件來支援應用專用的行為。
應用框架強調的是軟體的設計重用性和系統的可擴充性,以縮短大型應用軟體系統的開發週期,提高開發質量。
與傳統的基於類庫的面向物件重用技術比較,應用框架更注重於面向專業領域的軟體重用。應用框架具有領域相關性,構件根據框架進行復合而生成可執行的系統。框架的粒度越大,其中包含的領域知識就更加完整。
框架,即framework。其實就是某種應用的半成品,就是一組元件,供你選用完成你自己的系統。簡單說就是使用別人搭好的舞臺,你來做表演。而且,框架一般是成熟的,不斷升級的軟體。 框架的概念最早起源於Smalltalk環境,其中最著名的框架是Smalltalk 80的使用者介面框架MVC(Model-View-Controller)。隨著使用者介面框架Interviews 【Linton 89】和ET++ 【Weinand 89】 的開發和釋出,框架研究越來越受到研究人員的重視。雖然框架研究最初起源於使用者介面領域,但它還被成功地應用到其他領域中,如作業系統、火警系統 等。Taligent公司於1992年成立後,框架研究受到了廣泛的重視。該公司計劃基於框架來開發一個完整的面向物件作業系統。另外,該公司還發布了一套支援快速應用開發的工具集CommonPoint,其中包括了上百個面向物件框架 【Andert 94,Cotter 95】。框架還沒有統一的定義,其中Ralph Johnson所給出的定義基本上為大多數研究人員所接受:
一個框架是一個可複用設計,它是由一組抽象類及其例項間協作關係來表達的。
這個定義是從框架內涵的角度來定義框架的,當然也可以從框架用途的角度來給出框架的定義:
一個框架是在一個給定的問題領域內,一個應用程式的一部分設計與實現。
從以上兩個定義可以看出,框架是對特定應用領域中的應用系統的部分設計和實現com/wiki/%E5%AD%90%E7%B3%BB%E7%BB%9F target=”_new” class=innerlink>子系統)的整體結構。框架將應用系統劃分為類和物件,定義類和物件的責任,類和物件如何互相協作,以及物件之間的控制執行緒。這些共有的設計因素由框架預先定義,應用開發人員只須關注於特定的應用系統特有部分。框架刻畫了其應用領域所共有的設計決策,所以說框架著重於設計複用,儘管框架中可能包含用某種程式設計語言實現的具體類。
一個基於框架開發的應用系統包含一個或多個框架,與框架相關的構件類,以及與應用系統相關的功能擴充套件。
與應用系統相關的擴充套件包括與應用系統相關的類和物件。應用系統可能僅僅複用了面向物件框架的一部分,或者說,它可能需要對框架進行一些適應性修改,以滿足系統需求。
面向物件的框架作為一種可複用的軟體,在基於框架的軟體開發過程中會涉及到框架的開發和利用兩個方面的工作。框架的開發階段在於產生領域中可複用的設計。該階段的主要結果是框架以及與框架相關的構件類。該階段的一個重要活動是框架的演變和維護。象所有軟體一樣,框架也易於變化。產生變化的原因很多,如應用出錯,業務領域變化,等等。
不論是哪一種技術,最終都是為業務發展而服務的。從業務的角度來講。首先,框架的是為了企業的業務發展和戰略規劃而服務的,他服從於企業的願景;其次,框架最重要的目標是提高企業的競爭能力,包括降低成本、提高質量、改善客戶滿意程度,控制進度等方面。最後,框架實現這一目標的方式是進行有效的知識積累。軟體開發是一種知識活動,因此知識的聚集和積累是至關重要的。框架能夠採用一種結構化的方式對某個特定的業務領域進行描述,也就是將這個領域相關的技術以程式碼、文件、模型等方式固化下來。

為什麼要用框架

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

解決問題

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

網頁設計中的框架概念

框架是網頁中經常使用的頁面設計方式,框架的作用就是把網頁在一個瀏覽器視窗下分割成幾個不同的區 域,實現在一個瀏覽器視窗中顯示多個HTML頁面。使用框架可以非常方便的完成導航工作,讓網站的結構更加清晰,而且各個框架之間決不存在干擾問題。利用框架最大的特點就是使網站的風格一致。通常把一個網站中頁面相同的部分單獨製作成一個頁面,作為框架結構的一個子框架的內容給整個網站公用。
一個框架結構有兩部分網頁檔案構成:
框架Frame:框架是瀏覽器視窗中的一個區域,它可以顯示與瀏覽器視窗的其餘部分中所顯示內容無關的網頁檔案。
框架集Frameset:框架集也是一個網頁檔案,它將一個視窗通過行和列的方式分割成多個框架,框架的多少根據具體有多少網頁來決定,每個框架中要顯示的就是不同的網頁檔案。
所謂框架[4] 就是把網頁分成幾個框窗,同時取得多個 URL。用來劃分框窗,每一框窗有一個,必須在範圍中使用。如:  

<frameset cols="50%,*">
  <frame name="hello" src="1.html"> <frame name="hi" src="2.html">
</frameset>

此例中 把畫面分成左右兩相等部分,左面顯示 1.html,右面顯示 2.html
  
程式設計中的框架概念

程式設計中的框架包含DoitPHP(原Tommyframework)是一個基於BSD開源協議釋出的輕量級PHP框架,還包含如thinkphp、codeigniter(簡稱CI)、yii framework、doophp、qeephp、等主流的程式設計框架,根據個人習慣和效能要求,其各也有不同的優缺點!
從軟體設計角度,框架是一個可複用的軟體架構解決方案,規定了應用的體系結構,闡明軟體體系結構中各層次間及其層次內部各元件間的毅力關係,責任分配和控制流程,表現為一組介面,抽象類以及例項間協作的方法。