Help us understand the problem. What is going on with this article?

1.7.1までViewModelだったのが1.7.2でPresenterになったFuelPHPの話をしよう

More than 5 years have passed since last update.

何があったし

すごい今更感(1.7.2のリリースは2014年7月)ですけど、業務で使用してリリースした後はすっかりご無沙汰だったので気づけませんでした…。びっくりしすぎて思わず投稿してしまいました。てっきり1.8になったら ViewModel が廃止になるだけだとばかり思っていました。

GitHubのChangelogにこうありました。
fuel/CHANGELOG.md at 1.7/master · fuel/fuel · GitHub

As of 1.7.2, the Viewmodel class is deprecated, and replaced by the Presenter class. Functionality has remained largely the same, and a Viewmodel alias is present to maintain backward compatibility.

It has proven difficult to explain what a Viewmodel is and does, and why you should use it. Also having a classes/view and a views folder was very confusing for a lot of people. It is also a step closer to Fuel v2, there this class is also called Presenter.

Google先生による翻訳を脚色すると

1.7.2では、ViewModel が廃止されて Presenter に置き換えられました。機能はほぼ同じで、ViewModel のエイリアスが下位互換性維持のために存在してます。

ViewModel が「何」で「何をするか」、「なぜ使うのか」が説明困難であることが判明しました。また、classes/view と views フォルダがあることが多くの人を混乱させました。
ViewModel は Presenter とも呼ばれ、Fuel v2 でも同様です。

みたいです。脚色は適当です。

何が変わったのか

Changelog にもありましたが、

これが
http://fuelphp.jp/docs/1.7/general/viewmodels.html

こうじゃ
http://fuelphp.com/docs/general/presenters.html

内容あんまり変わってないじゃん!!

1.7.x 系のアップデートでそんなにバッチリ変えてくるとはさすがに思いませんでした(震
素直に 1.8.0 からの導入でいいのではなかったのか…。

(※本家サイトは古いバージョンのドキュメントがすぐ見つけられなかったので、とりあえず日本語訳版の1.7のドキュメントを引っ張っています)

Presenterって何?

Google先生に問い合わせたところ下記のサイトを返してくれたのでざっと読んでみました。

MVPVM 設計パターン - WPF 向けのモデル - ビュー - プレゼンター - ビューモデル設計パターン
T90 きっと怖くないmvvm & mvpvm
一生涯プログラマ : FuelPHPのViewModelについて

MVVMパターン、MVPVMパターンなどの言葉がやたらと出てきましたが、読んでるとまるで Presenter は Controller みたいな動作をするもののような気がします。もちろん該当しない部分もありますが。

でも今回FuelPHPで置き換えられた Presenter は、そのまんま ViewModel という感じなので、なんとも違和感のあるアップデートです。今後役割が大きく変わってくるのでしょうか。「MVPVMパターンでいくからController消します^^」みたいな。業務が熱くなります…。

今使ってる僕らはどうすればいいの

日本語ドキュメントにはすっきり書かれていました。
ビューモデル - 概要 - FuelPHP ドキュメント

Changelog にあった通り、エイリアスが用意されているようですので、1.7.1以前からのアップデートを検討している案件などではそれでしのぐか、将来性を考えてサクッと Presenter に置き換えるかだと思います。

置き換える場合は、View_Sample_Index を Presenter_Sample_Index にすればいいんでしょうか。でもクラス名をコマンドで一発置換するとか恐ろしいですね…。Grep&Replaceを手動でやるとなると、大きいプロジェクトは大変そうです。

アップデートしなくていいやって?ダメです(。◔`◡◔+)b

セキュリティ関連のアップデートがあります。特にクエリビルダに関するものが含まれているので、ちゃんとアップデートしませう。DBアクセスゼロなサービスはあまり無いと思うので…。

Database

A potentional vulnerability was discovered in the way column name quoting was done. This has been fixed. This means that coding SQL functions manually was something you could get away with earlier now require you to use DB::expr() to encapsulate the function.

// old code, no longer works
$result = DB::select("LOWER \"field\")")->from($table)->execute();

// has to be replaced by
$result = DB::select(DB::Expr("LOWER \"field\")"))->from($table)->execute();

最後に

僕は FuelPHP のコーディング標準が好きです。はい、全然関係ないです。
Coding Standards - General - FuelPHP Documentation

お読みいただきありがとうございました!(日曜 AM 5:50 のテンションで)

mythrnr
Web系のシステム作ってご飯食べてるへっぽこ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away