ビルトインwebサーバーに対応しているので、apacheとの連携なしに、
独立したPHP5.4のインストールのみでCLI / Web双方の環境で実行することができます。
前回BEAR.ResourceでのFWプロトタイプではリソースサービスレイヤーが
フレームワークでどのように機能するかに着目したものでしたが
今回のはそれに加えてテンプレートエンジンを使用し全体を構成する
パッケージレイアウトを作成したという点がポイントです。
ビューはページリソース結果をビューリンクにリンクする事で実現しています。
PHP5.4のTrait使用でテンプレートエンジンをページ単位でPhp, Smarty3, Twig, Haangaの4つの中から
選ぶ事ができます。
※ これは実際の機能を目的とした実装ではなく、ページとビューがそれぐらい粗結合で
プラガブルになっているか、またページがビューに対して責任を持たないで済むかという実証を
目的としたものです。対応するテンプレートエンジンを増やすのが簡単にできるかという点もあります。
現在のBEAR.Sundayの構成です
BEAR.Sunday {
アプリケーション {
app1
app2 ...
}
オブジェクト・フレームワーク {
オブジェクトの生成 - Ray.Di GuiceクローンのDIコンテナ
オブジェクトの横断的利用 - Ray.Aop
オブジェクト間のコミニケーション制約 - BEAR.Resource
}
フレームワークパッケージ BEAR.Framework
サードパーティーライブラリ {
Smarty3
Twig
Haanga
}
}
(Ray.Di + AOP, BEAR.Resourceがオブジェクトフレームワークとしてコアパッケージになり、
それをフレームワークとして利用するための BEAR.Frameworkパッケージがあります。)
今回の評価プロトタイプで、アプリケーション内でスクリプトファイルを多用してるのも特徴です。
これは元々PHPがスクリプト言語という特徴を生かそうとしたものです。
(動的言語という意味でなく、phpはファイルにプログラムが記述してあればincludeで
読み込んだだけで実行するという機能のことです。)
http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E8%A8%80%E8%AA%9E
エントリースクリプト内でindex.php(これもスクリプトです)大きな機能の単位をスクリプトにしています。
boostrap,php - 入力、環境準備
ページリクエスト
output,php - 出力
例えば、output.phpをライブ用、デバック用、API用と変えるだけでこのページの振る舞いを
単純さを保ったまま変える事ができます。
"実行モード"を指定してフレームワーク内部でその組み合わせを変更するのではなく、
アプリケーションがどの組み合わせのスクリプトを使用するかで動作状態をコントロールします。
「機能はフレームワークが持っても、制御はアプリケーション側が持てるように」というSaturdayの時からの方針にそったものです。
Sundayの設計実装と平行して、それをうまく継続していくための整備も行いました。
* 継続開発のためCIサーバーをたて登録しました。
http://www.bear-project.net:8080/
* コード規約phpcs.xml、コード品質をチェックするためのphpmd,xmlを作成しました。
https://github.com/koriym/phpcs-modernphp
* 現時点でのコールグラフ描画やベンチマーク測定なども行いました。
オブジェクトグラフ・キャッシュオフ http://twitpic.com/7kcfxj/full
(長く伸びるグラフは依存の注入です)
オブジェクトグラフキャッシュオン http://twitpic.com/7kcmwt
(今はオートローダーを使用してないのでファイルの読み込みに時間がかかっているのがグラフから分かります。)
* テンプレートエンジンの簡単なパフォーマンス測定もしました。
http://twitpic.com/7jfdgk/full
(TwigとSmarty3はほぼ同じ、Django互換のHaangaが速度で優れてます。)
SundayはDI、アノテーション、アスペクト指向、リフレクションによるメソッドコール、等パフォーマンスフレンドリーでない機能を
多く使ってますがオブジェクトグラフキャッシュが機能していて、現在のところパフォーマンスは良好です。
* 開発tweet始めました。
http://twitter.com/#!/BEARSunday
長い仕込み期間を経て、徐々に形になってきました。
(ようやくwebブラウザでHelloWorldが見れました)
今後もプロトタイプを評価するイテレーションを繰り返し、方向性と設計実装を確認しながらリリースに繋げたいと思います。