Zend Framework 2.0 (zf2) 正式版釋出及新功能介紹

Allo發表於2012-09-06

著名php開源框架Zend Framework經歷了長達數年的開發,終於在2012年9月5日正式釋出了2.0版本,下簡稱ZF2。時隔Zend 1.0版本的釋出已經有5年之久。

php的框架一直都是百家爭鳴的,但是作為php官方運維的框架,Zend Framework在php開發者中的流行度並不高。其一是由於Zend Framework主要面向大型應用,對程式碼規範以及程式結構有嚴格的規定,入門門檻較高。另一方面還是因為Zend Framework整體的執行效率偏低,略顯笨重。

所以Zend小組本次可謂痛定思痛,ZF2並不像其他框架只是修修補補的更新,而是完全重寫了ZF1的所有程式碼,主打的口號就是“高效能”。

來看一看ZF2都帶開了哪些新的特性:

1. 模組化(ModuleManager)

比起ZF1來說,ZF2原生支援模組的概念,任意第三方php程式,只要遵循Zend的編碼規範和程式碼結構,都可以變成一個Zend模組。目前已經有一批試驗階段的模組出爐(參看ZF2 Modules)。 其中不乏像Doctrine ORM這樣優秀的專案。

可以預見的是,隨著ZF2的慢慢成熟,越來越多可以選擇的模組將大量湧現,可能未來基於ZF2的專案開發,會像搭積木一樣輕鬆簡單。

2. 事件驅動(EventManager)

傳統程式中,程式碼都是按線性順序執行的,所以開發中往往很難將一些功能獨立為一個元件或模組。

事件驅動,或者也可以叫鉤子(Hook),改變了普通程式流程化的執行方式,應用了事件驅動之後,程式將呈現“註冊事件” => “觸發事件”的跳躍式執行,可以在不影響原有程式程式碼的,很容易的在任意位置加入新的業務邏輯,讓專案的開發變得極為靈活。

3. 服務管理器(ServiceManager)

服務管理器的概念來自於"服務定位模式(Service locator pattern)"的程式設計思想。這種思想提倡將程式中的每一個獨立功能提取出來作為一個“服務”,每一個服務都是獨立可喚醒的,只有服務被呼叫時,服務相關的程式才會啟動。

這也就是ZF2效能提升的祕密所在,ZF2的MVC啟動流程中無處不體現ServiceLocator的思想,功能模組的呼叫極為“吝嗇”,想必會給以前對Zend效能有意見的開發者一個大大的驚喜。

4. 依賴注入(Di Dependency Injection)

依賴注入廣泛應用於Java的主流框架中,可以很好的解除大型應用中的耦合。ZF2引入Di也經過了反覆的考量和權衡,即使進入beta階段,Di仍然一度作為ZF2的基本實現方案,整個Mvc的配置基於Di。最終為了避免陷入Di可能造成的後設資料式程式設計泥潭(Metaprogramming), Di只是作為ZF2的底層實現,上層加入了ServiceManager。普通開發者在使用ZF2的過程中不需要接觸到Di的層面。不過這並不妨礙DI作為一個優秀的php元件存在併發揮作用。

5. 社會化程式設計

ZF2的程式碼完全託管在Github,藉助Github的優秀設計,任何人都可以輕鬆的通過fork參與ZF2的專案建設,甚至提交新的模組功能。筆者AlloVince也幫助Zend小組修復了一些BUG,發現Zend小組響應非常快(從沒有超過24小時),對反饋的意見也會花時間認真解答。所以參與ZF2專案是參與php開源專案一個不錯的選擇。

總結

正如ZF2釋出資訊中寫到的,沒有哪個框架是完美的,ZF2也不例外。所以作為開發者要做的,不應該是糾結於哪個框架好哪個框架不好這種永遠也得不到結論的問題,而是針對不同的專案選擇合適的框架。

在現階段,開發大中型php應用,特別是商業應用和企業應用,ZF2是一個非常不錯的選擇,因為ZF2有嚴格程式碼規範,非常適合團隊開發。而ZF2作為Zend官方的支援產品,整體的可靠性和BUG的響應速度也都是有保證的。

相關資源

最後對於有興趣的朋友,歡迎訪問ZF2官方網站嚐鮮。

筆者也整理出一些實用的ZF2資源如下:

相關文章