如果你裸寫php,一個項目就會出現很多的頁面控制器(Page Controller),如果項目很大,重復代碼就很多,越來越變得很難維護。有了問題,自然就有解決方案!於是前端設計模式 閃亮登場!
前端控制器建議集中處理所有請求的處理,前端控制器通過讓單個控制器負責傳輸所有請求,從而解決了在 Page Controller 中存在的分散化問題。控制器本身通常分為以下兩部分實現:處理程序和命令層次結構
一個前端控制器其本體包括兩部分:一個分發中心(或叫調度處理程序)和一個command(或動作)層次結構。當一個請求到達服務器,前端控制器接收此請求,從其請求信息中獲取足夠的內容並決定下一步操作,然后委托給某個command,執行操作。
看了Zend_Controller_Front 源碼 實現了» 模型-視圖-控制器 (MVC)應用程序的» 前端控制器模式。目的在於初始化請求環境,並路由到來的請求,接着分發任何發現的動作;收集所有的響應,在整個過程完成時就其返回。 同是也實現了 單件(Singleton)模式,意味着任何時候,都只可能有一個有效實例。這使得它可以作為注冊表,供分發過程中的其他對象引用。
下面是簡單Zend_Controller_Front 簡單類圖
Zend_Controller_Front 把request 對象和response 對象 傳到 dispatcher 對象,dispatcher 對象通過 request 找到相應的controller 和 action, 渲染試圖!執行方法。還有管理plugin 和路由。
java 的 Strut1和Struts2里面的做法算是比較經典的兩種前端控制器。Struts框架以XML配置方式體現,在strut.xml配置動作,在web.xml中配置過濾器。當然我並沒有研究過ssh的理念,所以不在這里啰嗦了。感覺php好雜!沒有自己的核心理念。以前的理念是面向過程,后來又加入面向對象東西!個人感覺php只是一個tool 而不是language。想深了玩,可以去研究c、c++、服務器。想向廣了玩可以玩玩java,那才是面向對象的正統。純屬屌絲coder個人見解,不要人身攻擊噢!
--EOF--