konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


コーディング指針

MVC

PHPのスクリプトは、HTMLに埋め込む形で、断片的に書かれる事が多い。 実際に出版されている入門書や雑誌の特集記事の大半が、そのような記述をしている。

ここでは、PHPの一般的な記述方法を全て忘れ、より効率的な開発を実現するためのコーディング方法を説明する。

MVCの考え方

MVCとは、Model, View, Controllerの3つの構成で設計されている。これは、スクリプトを3つの役割に分割し、各スクリプトが何を処理しているのかを明確にするためである。

それぞれ、順を追って説明する。

Model(モデル)

ビジネスロジックを処理するスクリプト。

このスクリプトは、要求された情報を取得して、変数などに保持する。 それ以外の処理は一切行わない。 エラーが発生した場合も、その情報をプロパティに持つなどするに留まり、それ以上の処理を行ってはならない。

次のスクリプトは、モデルのサンプルである。

<?php
class FooModel {
    var $template;
    var $extensions;
    var $functions;

    function FooModel()
    {
        $this->template = 'default.tpl';
        $this->extensions = get_loaded_extensions();
    }

    function exec()
    {
        $name = isset($_GET['name']) ? $_GET['name'] : 'standard';
        $this->functions = get_extension_funcs($name);
    }
}
?>

View(ビュー)

ビジネスロジックで得た情報を画面に出力するスクリプト。

テンプレートエンジン(Smartyなど)を用いて、目的のデザインで出力する。 それ以外の処理は一切行わない。 エラーが発生した場合は、ブラウザへの出力を行わず、エラー画面を出力するのみに留まり、それ以上の処理を行ってはならない。

次のスクリプトは、ビューのサンプルである。

<?php
include_once('Smarty.class.php');

class FooView {
    function FooView()
    {
    }

    function display($obj)
    {
        $smarty =& new Smarty();
        /* この行に Smarty の諸設定を記述して下さい */
        $smarty->assign(get_object_vars($obj));
        $smarty->display($obj->template);
    }
}
?>

Controller(コントローラ)

ファンクションなどを判別し、ModelとViewを呼び出すスクリプト。

全体の流れをコントロールするに留まり、それ以外の処理を行ってはならない。

次のスクリプトは、コントローラのサンプルである。

<?php
include_once('FooModel.php');
include_once('FooView.php');

class FooController {
    function FooController()
    {
    }

    function run()
    {
        $model =& new FooModel();
        $model->exec();

        $view =& new FooView();
        $view->display($model);
    }
}

$ctrl =& new FooController();
$ctrl->run();
?>

MVCの流れ

  1. コントローラが呼び出される(コントローラをメイン/サブと多層化する事もある)
  2. $_REQUEST['func']などの値からファンクションを取得する
  3. ファンクションに応じたモデルを実行する
  4. モデルの情報を引数にして、ビューを実行する

最終更新のRSS