2008-01-09

淺談 php framework(程式產生器)

這個年頭,時興著一些新、怪的名詞。尤其在電腦應用上面,相信很多人和我一樣,對一些新出來的名詞都感到陌生。

相信 php 的使用者都聽到一個名詞 → php framework,PHP 我想不用再解釋了,那麼 framework 是何方神聖呢?

查一下字典吧,frame 原意是 "架構"、"框架" 之意,work 就不遑多說了。可能還是有點不太了解,簡單的來說就是一種開發程式的方法。

不禁想起從前 dos 和 windows 初期的所謂 "程式產生器"。這是一種開發程式的方式,只要簡單的填入你想要的程式功能,這個 "程式產生器"就會自動的產生相關的程式碼。

ps: 程式產生器只是個名詞、觀念,不必太自閉於這個名詞。我以為像目前流行的 IDE(整合開發環境) 或 本文提到的 framework,也都是同出一轍,都可算是 "程式產生器" 的一種,只是名詞不同,但實質效果是一樣的。

這有什麼好處呢?

- 程式易於開發,不用像傳統開發程式般的需從零開始
- 易於維護:由於程式設計師的思維、風格不同,同樣效果的一個程式,可能寫法就萬萬千千了,這往往造成接手維護者的困擾。君不見,往往很多接手者寧願從寫該程式,也不願採用改寫的方式
- 開發時期短

當然,有其優點,必有其缺點。我想馬上想到的缺點如下:

- 成本問題:一般這些 "程式產生器",在從前 dos 及 windows 初期,都需要購買。這增加了開發者的開發成本,而且所費不貲
- 適應問題:使用一種 "程式產生器" 前,要全盤了解其應用邏輯,這往往增加了使用者的開發時間。當然,熟悉後,就沒這個問題了
- 程式功能:這些 "程式產生器" 都是業者的主觀意識下開發的,也有 "程式產生器" 開發者的功力問題。如果寫這個 "程式產生器" 的人功力不怎麼樣,那麼使用者的使用效果及痛苦就可想而知了
- 彈性考量: "程式產生器" 往往是寫死的,雖然有部份彈性較大,可方便的擴充,但由於是採封閉意識,所以彈性很有限

時至今日,很多人使用 php 來開發程式。由於 php 採擷了各種語言的精華,主要是 c 及 perl,所以某個程度來說,亂是其特色之一,雖然它寫起來很 "自由",不像某些程式語言的規定太多,綁手綁腳的。這也往往造成如先前提及的一些問題。

從某個角度來看,寫法 "自由",可能意謂者 "困擾",尤其是對接手者,或想觀摩你的程式者來說,可能會覺得看你的程式是天底下最痛苦的事。有些 php 使用者說,php 是種容易學習的語言。我對這個說法持保留態度。

可能買本 php 入門書,對有程式設計經驗的人來說,幾天內就可看完了,並對其有個概念。這就算容易嗎?很多語言都有這種特質,不管是公認最簡單的 basic,或是 c、c++、pascal、perl、python、ruby.. 等,或是公認最困難的組合語言吧,我想程式設計師都能在幾天內消化一本入門書,但接著下來呢?

往往程式中的每個指令、元素,你都看得懂,但若要叫你將這些元素組合成一個程式時,很多人就呆了,不知所措。所以看得懂程式是一回事,但會寫程式又是另一回事。 要如何避免這些問題呢?除了多多實作外(只講實務,不說理論),"程式產生器" 可能是個好的解決方式,以現在環境來說,以下(以後)都用 framework代之。

目前的 php framework 你使用 google 輸入 "php framework" 就可找到一大票了,那麼問題來了,那個最適合你呢?答案沒一定。你可能要試試幾個,才能找到和你最 match 的 php framework。在以下的網址中,有一個各種 php framework 的比較,或許對你有些幫助。

http://www.phpit.net/article/ten-different-php-frameworks/

這些東東,都是老外寫的,而且大多是使用 php 類別方式來開發的。其中有的和傳統的 php 寫法差異不大,像是 CakePHP、Symfony .. 等,有的則似乎看不到 php 的影子(封裝的太過頭了 :-) ),完全以物件的方式及事件驅動(如在網頁上的 button 點一下)撰寫,像是 Prado。

以我的選擇標準來說,如下:

1. 和自己寫作的 style 相彷,這樣入門時間才可縮到最短,嗯!Time is money!
2. 長時間的支援,不要好久沒更新版本了
3. 參考文件是否完整,且時常更新,才不致雞同鴨講,不知所云
4. 是否有論壇、wiki,這可提供很多的實際使用者經驗,可能是原作者沒想到的
5. 軟體授權問題,一般都是免費使用的,不過還是有 GPL、BSD、MIT、Apache 等授權方式
6. 提供的 plugins 是否夠用,如 js、第三方開發的軟體、Ajax.. 等,這都攸關你的程式素質
7. 彈性:當提供的東東不夠時,可否很方便的加入或改寫我們想要的部份

在這方面我覺得,prado 及 symfony 在文件及更新上做得最好,反之 CakePHP 文件滿過時的,當看著手冊操作時,往往會不知所云。至於在範例上以 prado 最佳,例子很多且很精彩,但如前所言,prado 寫法和傳統的 php 寫法差很多,是否能接受這種寫法,取捨之間,就看你了。

另外,若對簡體字不排斥,那麼 ThinkPHP 可能是你最好的選擇了,這個 framework 我只試了一天多,初步的感覺還不錯。在文件上的素質還好,也有論壇及 blog。以下是相關網址:

官方網址:
http://thinkphp.cn

說了許多,像是一些名詞 MVC(model、view、controller)、CRUD(create、read、update、delete).. 等的 framework 基本觀念都沒提到,一來這些名詞,在網路上都可找到詳細的說明,二則有些 php framework 並不完全採取這樣的架構,所以為免誤會而加以省略。

願 framework 這種方式,能幫你解決許多在 php 設計上的問題,而且是更有效率的。

沒有留言 :

張貼留言