オブジェクト指向によるWordPressへのMVCモデル適用

WordPressはイベント駆動型モデルであると言われています。これは、URLを指定するだけで自動的にデータを取得(メインクエリー)し、自動的にテンプレートファイルを選択して画面表示(メインループ)するものです。

しかし、カスタム投稿タイプやカスタムタクソノミーを使ったWebアプリケーション開発に重きを置く場合は、サブクエリーを多用する場面が増えてきます。

WordPressには、サブクエリーを効率よく開発するためのモデルがありません。

今回は、サブクエリーを効率よく開発するために、MVCモデルを適用することについて解説します。

MVCモデルは、Modelクラス、Viewクラスにコードを集約し、オブジェックト指向の継承やオーバーライドを使って、類似のコードを抽象化することによって、コーディングの作業を軽減することができます。

次にオブジェクト指向でないコード(従来の書き方)とMVCモデルを使ったオブジェクト指向のコードを比較してみることにします。

オブジェクト指向でないコード

//サブクエリー
	 $args = array(		
 //条件の記述
	 );
 //WP_Query
	 $the_query = new WP_Query($args) ;

//サブループ
	 if($the_query->have_posts()){
	   While($the_query->have_posts()){
		   $the_query->the_post();
		     //表示の記述
		     the_title() ;
	       echo "<br>\n" ;	
	   }
	 }//endif

オブジェクト指向のコード(MVCモデル)

class Controller
{
 public function __construct($var){
	   $par =(object)$var;
	   $user = new Model($args);
   または
   $user = new ViewPost() ;
   $user->format();
 }
}

class Model
{
	public function __construct($var)
	{
	
//サブクエリー
		$args = array(		
  //条件の記述
		);
  //WP_Query
		$the_query = new WP_Query($args) ;

//サブループ
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					//Viewクラスの呼び出し
					$user = new ViewPost() ;
                                 $user->format();
			}
		}//endif
	}//endfunction
}//endclass

class View
{
public function __format()	

	}//endfunction
}//endclass

class ViewPost extends View
{
public function __format()
			//表示
			the_title() ;
			echo "<br>\n" ;		
	}//endfunction
}//endclass
//呼び出す側 
$args = arry(
//条件の記述
);
$user  = new Controller($args);

サブクエリー(WP_Query)とサブループは、書き方のパータンがたくさんあり、すべてのパターンを覚えるのは大変なことです。そのため、書くたびにコードディングミスが起こり、完成するまでに時間がかかります。当然のことながら、これをメンテする作業も大変です。

これに対し、オブジェクト指向で書かれたコードは、呼び出す側は、フィルタリング条件を記述してクラスを呼び出すだけで、サブクエリー~サブループ~表示までの処理が完了します。
 もちろん、呼び出される側のクラスとして、Controllerクラス、Modelクラス、Viewクラスがあり、これらのコードを合わせると、オブジェクト指向を使った場合の方がコードの量は格段に増えます。しかし、これらのクラスは、再利用することを前提に作成していますので、次回からは、呼び出す側の記述のみで済みます。
 また、クラスには、スーパークラス(親クラス)の機能を継承して、差分の部分のみをサブクラス(子クラス)に記述することができ、メンテの効率が向上します。

コメントよろしくお願いします。