MVCモデルで見るRubyとPHPの違い
約1年くらいPHPを触っていないのでもしかしたら的はずれなことを言ってしまうかもしれませんが、MVCモデルを例にとってRubyとPHPの違いを自分なりに考えてみたいと思います。
自分が利用したことのあるフレームワーク
Ruby -> Rails
PHP -> CodeIgniter
なのでここから見ていきます。
ちなみにこれからダラダラと書きますが、結論は(個人的に)Rubyの方が優れているという内容を書きます。
MVCモデルについて、詳しく説明することもないのですが、RailsとCodeIgniterで大きく違う点を示したいと思います。
まずはCodeIgniterのMVCモデルから
このようになっております。
つまりRubyは全てのものがオブジェクトであるという点からPHPとはMVCの概念も異なるということが言えます。
仮にとあるWebサービスのユーザーランキングページを作るとします。
そのページにはユーザーのランキング情報プラス各ユーザーの詳細情報も見ることができます。
CodeIgniterではまずモデルにランキング情報を取得するメソッドを作成します。
同様にモデルにユーザーの詳細情報を取得するメソッドも作成します。
コントローラーでランキング情報を取得するメソッドを呼び出し、
結果をループさせユーザーの詳細情報が付与されたランキング情報のハッシュを作成します。
そのハッシュをviewに渡しforeachで表示させます。
イメージ的には
<?php //モデル function ranking{ ~ // {"rank" => , "user_id" => } return ranking_hash; } function user_info($user_id){ ~ // {"id" => , "name" => } return user_info_hash; } ?> <?php //コントローラー $ranking = $this->モデル->ranking; foreach($ranking as $user){ $user_data = $this->モデル->user_info($user["user_id"]); $ranking_array = { "rank" => $user["rank"], "user" => $user_data } } ?> //ビュー <?php foreach($ranking_array as $user): ?> <tr> <td><?php echo $user["rank"]; ?></td> <td><?php echo $user["user"]["name"]; ?></td> </tr> <?php endforeach; ?>
このような感じかと思います。
一方Railsで同様のことをすると
コントローラーでモデルのランキングメソッドを呼び出す
ビューでモデルの詳細メソッドを呼び出す
このようになります。
#モデル def self.ranking ~ ranking_object end def user_name self.name end #コントローラー @ranking = モデル.ranking #ビュー <% @ranking.each do |rank, user| %> <tr> <td><%= rank %></td> <td><%= user.user_name %></td> </tr> <% end %>
このような感じになります。CodeIgniterと比べるとコントローラーのやることがかなり減るかと思います。
また、そもそもコントローラーで@rankingとしなくても、ビュー側で
<% モデル.ranking.each do |rank, user| %>
というようにも書くことが出来ます。
ただこれは一長一短でもあり、ビューにプログラミング要素を入れ過ぎないようにすることも必要です。
メリット・デメリットを整理すると
メリット | デメリット | |
CodeIgniter | ビューのロジックが減るためデザイナーが扱いやすい | コントローラーが肥大化する |
Rails | コントローラーがスッキリする | デザイナーにもオブジェクト指向を理解してもらう必要がある |
あとは色々パターンがあるためRailsの場合はチューニングがめんどくさそうです。
CodeIgniterの場合はコントローラーのベンチマークをとってチューニングするだけで良さそうですが。
まとめですが、個人的にはコントローラーがスッキリするRailsの方が好きだし優れていると感じます!
駆け足気味でしたが、MVCモデルを例にとってRubyとPHPの違いを示してみました。
これから新たな言語を学ぶ方や、PHPをずっとやっている方はRubyを使ってみてはいかがでしょうか?
ちなみにずっとPHPをやっていた方は最初はコントローラーが長くなるかと思いますが、徐々に慣れていきスッキリとしたコントローラーになるでしょう。
Ruby on Rails 3 アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2011/05/12
- メディア: 大型本
- 購入: 27人 クリック: 664回
- この商品を含むブログ (41件) を見る
- 作者: 黒田努
- 出版社/メーカー: インプレスジャパン
- 発売日: 2013/03/22
- メディア: 単行本(ソフトカバー)
- クリック: 3回
- この商品を含むブログ (6件) を見る