質問: FuelPHPを利用しているのですが、 Presenterの使いどころがいまいちわかりません。 元々FuelPHPではPresenterをViewModelと命名されていたため AngularJSで使っていたMVVMを考えてみました。 Angularでは画面(View)から処理の塊(ViewModel)を呼び出し、 Modelのデータを加工し、ViewModelが双方向データバインディングでViewに通知すると言う設計をしていました。 ただ、今回のFuelPHPのPresenter=ViewModelと考えた場合、 まず、ViewからPresenterを呼び出し、Modelのデータを加工し、 一部分だけViewに通知すると言う使い方になると思うのですが、 PHPには双方向のデータバインディングは存在しません。 Presenterの使いどころをご存知の方がいらっしゃいましたら、教えてください。 よろしくお願いします。
回答: 表示整形用の処理を置いて表現(デザイン)とロジックを分離するために使います。 FuelPHPのPresenter/ViewModelはMVPのPでもMVVMのVMでもなく、MVCでいえばVです。 FuelのViewはSmartyやTwig、生PHPなどの、テンプレートエンジン用のテンプレートファイルを置くための場所となっています。 Webアプリケーションの開発ではHTML出力に関わるテンプレートを書く部分と、ビジネスロジックを書く部分を分離して作るのがよくあるやり方です。 超ざっくり分けると、なんかクラスとかメソッドとか使ってゴチャゴチャ処理する奴はMやC、Vのテンプレートでは変数の出力や単純なループ/分岐くらいで済ます、という感じになります。 デザイン修正で処理を壊したり、処理の修正でデザインが崩れるといった問題を避けやすくなり、またデザインや処理単独での修正時に関係のない部分を思考から排除できるため、作業がしやすくなります。 ただしこのような分け方をしますと、表示上でのみ必要な整形処理(たとえばDBから取得したデータをHTMLのテーブルに出力しやすい形の配列へ加工する処理など)をどこに置くか、という問題が出ます。 Vに密接な処理となるので、本来Mに置くのもCに置くのも釈然としません。といってVのテンプレートファイルに複雑な処理を置こうとすると、複数画面での処理共通化やマークアップエンジニアとの共同作業など、色々面倒な部分が増えます。 MVCのVを * テンプレートエンジン用のテンプレートファイル * 表示整形処理を置くPresenter/ViewModel の2階建てとして、表示整形処理のおさまり場所を作るとともに、クラスとして作るので継承やtraitなどで処理の共通化も可能となる、というのがFuelPHPのPresenter/ViewModelです。利用は任意で、必要を感じなければ使わなくとも問題ありません。 * 使うメリット + 気持ち的にすっきりする + MやCがすっきりする * 使うデメリット + がっつり使うとファイル数が増えがち(似たような名前のファイルがMVC/ViewModelそれぞれにあるとか)