コネクト株式会社 技術情報コンテンツ | ||
[[コーディング指針]] MVCPHPのスクリプトは、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の流れ
|