Keel, 元架構 (Meta Framework)
開發應用程式時,不管是網絡應用,企業還是科學應用,開發者經常需要依賴不同的架構來作為開發的出發點。架構通常由一整套元件,函數和服務組成,用于某種特定應用的開發。
目前已有很多種開源或商業的架構得到廣泛應用,下面是一些常用的架構:
網絡/使用者界面: Struts, Cocoon, Velocity, Tapestry
商業邏輯:EJB
持續:JDBC, JDO, Hibernate
安全認證:JAAS
消息:JMS
每種架構都提供了用來建立應用程式或元件的所有東西,是以你可以很友善的使用他們。但是如果需要将不同的架構內建起來,讓它們一起工作,就會産生問題,最常見的問題有兩種:
1. 許多架構是和容器,伺服器或其他架構捆綁在一起的,是緊耦合的,它們隻能在推薦的組合下工作良好。這種緊耦合限制了開發者對架構的選擇。如果選擇了一種架構,出于成本,安全,易用性,性能方面的考慮,我們就無法使用其他架構。
2. 缺乏統一的接口,不同的架構之間無法通信。這增加了系統內建的難度,開發者不得不編寫非标準的代碼來完成通信和內建,這種代碼需要不斷的更新維護。
Keel 架構可以幫助你克服這些問題。Keel 是一個高效,高擴充性的開源元架構,是架構的架構。Keel用JAVA實作,目前的版本是2.0 RC 1。Keel基于Apache Avalon項目,內建了許多的基于JAVA的架構,每個架構針對某種特定的應用,例如使用者界面,資料庫,消息傳遞,安全等等。Keel把可以這些架構結合在一起來建立一個完整的,內建良好的系統。Keel允許開發者随時從內建系統中加入或取出指定的架構,這樣開發者就可以從豐富的架構庫中自由的選擇完成不同功能的架構,同時又不必擔心這些架構之間緊耦合的問題。
Keel同時提供了一個統一的架構間通信接口,這個接口不會因架構的加入或取出而改變。為了做到這一點,Keel把所有的元件都看成獨立的單元,每個單元都基于不同的架構。通過一個統一的接口使用每個獨立的單元。這個接口同時也是調用單元所提供服務的入口,其他的單元隻與這個接口互動。當某個架構被替換時,隻有相應的單元接口需要少量的改變,其他的部分仍然保持不變。
三個核心概念:
1. COP(component oriented programming) 面向元件程式設計 每個應用程式由獨立的單元組成,通過标準的接口調用。這個概念為應用程式提供了可插拔的靈活性。
2. SOC(separate of concerns) 任務分離将每個元件盡可能的分成許多獨立的任務,每個任務由一個标準接口單獨處理。這種方法可以使使用者使用,控制,修改任何一個函數卻不會影響其他的函數。
3. IOC(inversion of control) 控制可逆在其生命周期中,元件在配置檔案的幫助下由外部控制。這種方法可以友善高效的從外部控制元件。
Keel的架構
Keel 遵循COP概念,定義了一套基本服務,可以作為建構內建系統的基本子產品。
模型: 用于商務邏輯之間的互動
持續性: 用于管理,儲存和重新得到對象的狀态和資料
安全: 管理應用程式的安全,包括認證和授權
排程: 排程應用程式各種功能
加密: 加密需要傳送的資料
這些服務也被稱為角色,由內建在Keel中的各個元件提供。每個角色其實是一個接口,與定義服務合同的元件一一對應。元件是角色的實作,執行所有實作相應角色的任務。Keel為最常用的服務提供了預設的實作,同時允許使用者建立自己的基于特殊架構的元件,但是這些元件必須隐藏在标準接口之後。
基于SOC 概念,元件被分成許多獨立的任務,每個任務由一個标準接口單獨處理。 例如:一個元件可以是可記錄的,安全的,持續的和可配置的,這些任務由單獨的标準接口實作。
基于 IOC 概念,所有的角色群組件是外部可控的。Keel的配置檔案有兩個:roles.xonf用來配置角色;system.xconf用來配置元件。可以在任何時候通過改變這些檔案來改變元件的配置。
目前Keel為大多數角色提供了預設實作,同時還提供了一些可選的實作。使用者可以直接使用這些預設的實作,也可以修改這些預設實作以适應特殊的需求,或者開發自己的實作然後加入Keel。下面是一些主要角色的清單:
¨ 模型:一個預設的實作是org.keel.service.model.StandardModel,這是一個實作了模型接口的抽象類,可以接受由使用者界面産生的請求,處理請求,然後傳回資訊到使用者界面。
¨ 持續: 預設實作是JDBC資料源。其他的選擇有JDO,Hibernate, Entity Beans of EJB, LDAP
¨ 排程: 預設實作是QUARTZ。也可以選擇Jcrontab。
Keel計劃為所有定義的角色加入實作,進而可以給開發者提供更多的選擇。綜上所述,Keel是一個強大的內建架構,它可以将各種不同類型的應用架構結合在一起,卻避免了由此帶來的緊耦合問題。Keel允許開發者随時加入取出需要的架構,使用者可以根據需要自由的選擇最适合的架構來滿足不斷變化的需求。可以在Keel's home page 下載下傳Keel. Keel Documentation Wiki 有很多關于Keel的資訊和連接配接。