/var/log/masayoshi/masayoshi.life.log

とりあえず、書きたいこと書くだけ。

Reinforce_Zweiの裏話 第2回 シンプルなのは美しきかな

とりあえず、不定期更新になりそうな裏話シリーズは3回目です。
今回は実装の詳細について語ってみようと思います。

すべてモジュールであれ

0回あたりで語ったのですが「すべてモジュール」いう形で実装しています、Zwei自体に実装しているのは

  • モジュールを呼び出すこと
  • モジュール内の関数を実行させること

だけです、と言っても一部は初代"Reinforce"の機能をオーバーラップしています。
ディスパッチャも機能として実装はしていますが、あくまでもモジュールにこだわってます。
以下のコードはリクエストを集中させるファイルのコードです

<?php
header( 'Pragma: no-cache' );
try{
//require Core Reinforce Zwei
        //主要ファイル呼び出し
	require_once("Reinforce.php") ;
	require_once("Reinforce_Zwei.php") ;
	require_once("Controller/Base_Controller.php") ;

	$Reinforce_Zwei = new Reinforce_Zwei ;//Zweiのインスタンス生成
	/*Controll with Method*/
	if($_GET == null){
		$Dis_Controll = "Index" ;
		$Dis_Method = "Index" ;
	}elseif( $_GET["Method"] == null){
		$Dis_Controll = $_GET["Controll"] ;
		$Dis_Method = "Index" ;
	}else{
		$Dis_Controll = $_GET["Controll"] ;
		$Dis_Method = $_GET["Method"] ;
	}

	$Reinforce_Zwei->import_module("Dispatcher") ;//ディスパッチャモジュール呼び出し
	$Reinforce_Zwei->load_method("Dispatcher","dispatch",array($Dis_Controll,$Dis_Method)) ;//ディスパッチャへ処理を引き渡す


}catch(Exception $e){

}

?>
<

try〜catchはどこかで例外処理実装しようとして忘れている証拠です、簡単にプロセスを紹介すると

+インスタンス生成
+モジュール呼び出し
+メソッド実行(以下の処理引渡し)

だけしか、行いません。
あれもこれも詰め込んでメンテナンスが面倒になるのは目に見えているので、機能別に分けてしまう方が後々楽になるという考えです。

おまけとしてディスパッチャのコードも
>|php|
<?php
class Dispatcher{
	public function dispatch($Controll,$Method){//コントローラー呼び出し
		$Controll_Name = $Controll."_Controller" ;
		$Controll_Path = "Controller/".$Controll_Name.".php" ;

		if(file_exists($Controll_Path)){//コントローラーの有無確認 あり
			require_once("Controller/".$Controll_Name.".php") ;
			$Disp = new $Controll_Name($Controll) ;
			$Disp->$Method() ;
		}else{//コントローラーなし
			require_once("Controller/Index_Controller.php") ;
			$Disp = new $Controll_Name("Index") ;
			$Disp->$Method("Hello") ;
		}

	}
}
?>
<

コントローラーについては基本的な機能をベースファイルとして構成し、それを継承して実装することになっています。
仮に当該のコントローラーがない場合はIndexコントローラーへ処理を飛ばすように実装しています、このコントローラーがサンプルファイルとしての意味合いも持たせています。
詳細はgithubへ → <a href="https://github.com/masayoshimashita/Reinforce_Zwei/">Reinforce_Zwei - github</a>