Zend Framework 是由Zend 公司支援開發的完全基於PHP5 的開源PHP開發框架,可用於開發Web 程式和服務,採用MVC(Model-View-Controller) 架構模式來分離應用程式中不同的部分方便程式的開發和維護。
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開源專案一個不錯的選擇。