Delphi for PHP is Not on Rails

edited 十月 2013 in 進階PHP討論
Copyleft (c) 遊手好閒的石頭成. Contents is available under GNU Free Documentation License.
全文連結

CodeGear (前身 Borland 公司 IDE 部門) 日前發表了 Delphi for PHP 。於是我很快的觀看了一遍操作 Demo 。很遺憾,我必須說它並未發揮 PHP 的特色,程式碼寫作方式充滿了 Java/C# 風格,而不是 PHP 風格。

首先看看其 Demo 中的範例程式碼 (節錄主程式部份)。
<?php
class Unit1 extends Page {
    public $ListBox1 = null;
    public $Button1 = null;
    public $Edit1 = null;

    public function Button1($sender, $params) {
        $this->ListBox1->Items[] = $this->Edit1->Text;
    }
}

global $application;
global $Unit1;
$Unit1 = new Unit1($application);
$Unit1->loadResource(__FILE__);
$Unit1->show();
?>

Delphi for PHP 所展示的框架概念,通常稱為 event-driven and component-based framework。Visual Studio 等視覺化IDE 環境所採用的開發框架也是這一類。如果不是變數名稱前面加了個 $ ,乍看之下會誤以為是 C#/ASP.Net 。一個熟悉 Delphi 或 Visual Studio 等工具的程序員應該會覺得很親切,親切到不覺得有何不妥。

但是,對於我這種不使用 IDE 工具,又在 Web programming 領域打滾許久的程序員而言,一眼可以看出這種設計方式非常不敏捷,與引領目前 Web 開發趨勢的 Ruby on Rails 框架概念相違背。而 Ruby on Rails 的框架概念早已深深影嚮了目前 PHP 框架開發的趨勢,如 CakePHP, Code Igniter, PHP on Trax 等框架皆引入了 Ruby on Rails 的概念。

當我看到 Delphi for PHP 展示的程式碼時,我當下反應「為什麼我寫程式時要知道那裡有一個 button?」。一個熟悉 JSP/ASP.Net 等開發工具的程序員也許反應不過來,但了解 MVC 概念並使用過類似 Ruby on Rails 框架的 Agile programmer 應該已經知道我要講什麼了。

在我說明之前,請先觀看一段基於 Code Igniter 框架的 Demo 程式。Code Igniter 是基於 MVC 概念並引入 Ruby on Rails 概念的 PHP 開發框架。
<?php
class Blog extends Controller {
    function __construct() {
        parent::Controler();
    }
    function index() {
        $data['title'] = 'My Blog Title';
        $data['query'] = $this->db->get('entries');
        $this->load->view('blog_view', $data);
    }
    function comments() {
        $data['title'] = 'My Comment';
        $data['query'] = $this->db->get('comments');
        $this->load->view('comment_view', $data);
    }
    function comment_insert() {
        echo 'testing...';
    }
}
?>

這種框架主要透過 http://your_server/controller_class/method/arguments 這樣的 URL 形式,調用對應的 method of controller class 以及 view 。不妨就稱為 Method-driven framework ,以對應於 Event-driven framework。

在 Method-driven framework 中,我們將程式視為一個個等待使用者調用的服務,使用者只需透過基於 WS 或 REST (*2*2 WS: Web Service; REST: Representational State Transfer) 之 URL 即可調用 。在這類框架中,程序員在撰寫時根本不考慮使用者介面的內容,當然更不必知道那裡有一個 button 。

Is there a button, or any UI component else? I Don't Need To Know!

對程序員 (application programmer) 而言, Event-driven framework 令視覺元件侵入程式碼。修改 UI 之任何動作皆意味著程式碼之修改。於是要加一個 button 就要加一段 public $Button2=null; public function Button2(){} ,加一個 link 就要加一段 public $Link1=null; public function Link(){}。當程序員處於 IDE 環境之下時, IDE 工具在大多數時候會幫程序員處理這些內容。一但程序員脫離 IDE 環境,或是進行某些 IDE 工具未能掌握的編輯行為時,要修改這些程式碼就變成一個重覆性的作業。這自然不夠敏捷。

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=2573
Sign In or Register to comment.