従来の対面式の手続き型開発手法は、中規模以上のアプリケーションを扱う場合、その不十分さが見え始めます。たとえ要件をすぐに完了できたとしても、要件が変更された後、または事後メンテナンスを実行する際に、早い段階で構築した罠に深くハマってしまいます。したがって、オブジェクト指向アプローチを使用して MVC パターンを実装すると、プログラムのアーキテクチャを整理するための明確なアイデアが得られます。
MVCとは何ですか?
MVC には多くの定義と説明があります。詳細については Wiki または [2] を参照してください。ここでは詳しく説明する予定はありません。PHP 開発の観点から見ると、MVC は次のように要約できます。
View (ビュー) :
ビューというと、多くの人はテンプレート エンジン (Smarty など) を思い浮かべるでしょう。実際には、HTML テンプレートや Javascript ファイルなど、さまざまな出力が含まれます。
モジュール (モデル)
モジュールはプログラムのロジックを表し、通常、エンタープライズ アプリケーションではビジネス ロジック層と呼ばれます。一般に、この層によって行われる作業は、元のデータを処理して、設計したデータ構造に従って保存された意味のあるデータ シーケンスにし、これらのデータを処理のためにビューに渡すことです。通常、モジュール内でデータ操作に関する処理を行うにはデータ抽象クラスが使用されます。
モデルには通常、データベースを処理するために使用される関数が含まれています。
コントローラー
コントローラーは、すべての WEB アプリケーションの最初の停止点であり、$_GET 変数などの受信パラメーターを受け取り、それに応じて応答します。
MVC が PHP に適しているかどうかについても多くの議論があります [3]。現在、PHP MVC フレームワークにリストされているものなど、多くの MVC フレームワークが存在します。では、なぜ人々は MVC にこれほど熱心なのか、また設計で MVC を使用する必要があるのはなぜでしょうか。
MVC を使用する理由?
MVC は、デスクトップ GUI プログラミングの問題を解決するために初めて使用されました。最も初期の MVC フレームワークは、1999 年に Sun によって提案されたモデル 2 であり、後に Struts に発展しました。 MVC は人々に深い印象を与えますが、私たちはそれを使用するときに、なぜ MVC を使用するのかについて真剣に考えません。
従来のデスクトップ アプリケーションでは、モデルで何かが発生すると、ビュー インターフェイスをアクティブに更新して、バックグラウンドで発生した変更を表示できます。 Web アプリケーションでは、従来の Http リクエスト/レスポンス メソッドに限定されているようで、クライアントを更新させる方法がないようです。この議論は、MVC を WEB アプリケーションの開発に使用できないという意味ではありませんが、ある程度は最適ではないということです。
MVC[1] の使用についてはまだ多くの議論がありますが、MVC を使用して自分のプロジェクトを編成することに慣れているすべての人は、新しいプロジェクト アーキテクチャの選択を求められたときに、MVC を絶対に諦めないと私は信じています。
MVCを実装するにはどうすればよいですか?
以下は非常に単純な MVC 構造の実装です。データ ソースでも組み込みの固定配列が使用されていますが、実際には、多くの PHP フレームワークのコア実装の考え方はこれに似ていますが、一部のフレームワークでは次のような順序で実装されています。開発者にとって便利なツールをもっと入手するために、自分自身で PHP フレームワークを実装したいと考えています。また、フレームワークの開発からさらに多くの PHP 設計のアイデアや手法を学ぶことができればと考えています。
Controller.php
include 'Model.php';
include 'View.php';
class Controller {
private $model = '';
private $view = '';
B uパブリック関数コントローラー () {
$ this- & gt; model = new model (); $ this- & gt; ION DoAction ($ Method = 'defaultMethod', $params = array() ){
if(empty($method)){
$this->defaultMethod();
}else if( method_exists($this, $method) ) {A
Call_user_func (配列 ($ this, $ メソッド), $ params);
}
public link_page($name = ''){
$links = $this->model->getLinks();
$this->view-> ;display($links );
$result = $this->model->getResult($name);
$this->view->display($result);
}
公共 機能defaultMethod(){
$this->br();
echo "これは デフォルトのメソッドです。 ";
}
public function nonexisting_method( ){
$this->br() ;
echo "これは 存在しない メソッドです。 ";
}
public function br(){
echo "
";
}
}
$controller = new Controller();
$controller->doAction('link_page', 'b');
$controller->doAction();
Model.php
class Model {
private $database = array(
"a" => "hello world",
"b" => "ok よくやった",
「c」 => "さようなら",
);
//@TODO データベースに接続します
//クエリを実行し、結果を取得します
public 関数getResult( $name){
if( 空($ name) ){
return FALSE;
if( in_array($name, array_keys( $this->database ) ) ){
return $this->database[$name];
}
}
public function getLinks(){
$links = "Link A " ;
$links.= " リンク B ";
$links.= "リンク C " ;
return $links;
}
}
View.php
class View {
public function display($output){
// ob_start() ;
echo $output;
}
}
この記事は http://hi.baidu.com/ncsittiantian/item/72a30f081ec27edcdde5b036 から転載されました