Cake3の方向性が分かる記事の紹介(日本語要約)

Debuggable.comのfelixgeが書いた「Cake 3 interview with Nate Abele」が面白かったので、日本語で要約したものを載せます。かなり要約してるので、本文をみた方が良いです。
http://debuggable.com/posts/Cake_3_interview_with_Nate_Abele:4a665a5e-5bfc-4e42-96ee-6d284834cda3

記事を読んだ感じ、Cake3はクロージャを使ったフィルターシステムに力を入れてるっぽいです。


下記、要約です。

  • Cake2
    • PHP5のみサポート
    • CakePHP1.2や1.3と互換性を持たせる
      • 現行アプリの移行作業は少なく簡単に移行できる
    • Cake2を使うだけで1.2などに比べて25%ぐらい高速になる
  • Cake3
    • ネームスペース
      • コアをいくつかのパッケージに分けて独立させる(パッケージ間の依存関係を持たせない)
      • コアコードをモジュールっぽくCake以外のアプリからも利用可能なように
    • クロージャ
      • フィルターシステム : 独自機能をクラスやメソッドに入れ込める
      • フィルターシステムのインターフェースは標準化させる(学習のローコスト化)
        • コアクラスのフィルターを1回書けば、他のコアクラスのフィルター方法もすぐに書けるようになる
      • 現在フィルターシステムはインスタンスに対してのみ使えるけど、将来はクラスにも適用できるようにしたい
    • 簡単にSQLシンタックスを修正、拡張できるようにする
  • Cake3のサンプルコード
    • 発行したSQLクエリを全てロギングしたい場合
      • 1.2だとDatabaseクラスに手を入れる必要有(本質と関係ない処理まで入れるのは嫌だ)
      • Cake3だと、SQLを実行する_execute()メソッドに対してロギングをするフィルターを簡単にかませることが出来る
<?php
Connections::get('default')->applyFilter('_execute', function($self, $params, $chain) {
  $out = fopen('php://stderr');
  fwrite($out, $params['sql']);
  fclose($out);
  return $chain->next($self, $params, $chain);
});
?>
  • Collectionクラス
    • 配列のように振舞うが、そこに含まれているオブジェクトのメソッドを呼び出せる
    • Collectionクラスを継承したRecordSetオブジェクトを使うと、DBの結果を取得する際に、Lazy-fetchすることができる
  • 非リレーショナルDB
    • より簡単に、柔軟に対応できるようにする

クロージャについて分かりやすく書いてある記事
http://ryus.co.jp/modules/d3blog/details.php?bid=24