2009-01-01から1年間の記事一覧

有用なアーキテクチャ間の衝突について

Webアプリを構築するためにフレームワークや既存CMSを使うケースがありますが、それぞれに適したアーキテクチャがあります。通常、小さなシステムでは一つのアーキテクチャで貫徹できますが、その分、他のアーキテクチャを組み入れる余地が少なく、大型のフ…

エレベーターのリファレンスモデル

エレベータの要求仕様 第2回で紹介したように、分科会では一度モデリングに行き詰まり、概念モデルからやり直しを行いました。従って以下の要求仕様を参照すると分かりますが、「キャビンが呼び出され」→「移動階に移動して」→「ドアが開いて降りる」といっ…

View->renderで__toString可能なオブジェクトを返してみる

Viewでの処理結果をシームレスにキャッシュするため、レスポンスオブジェクトに追加するデータを文字列データではなく、__toString可能なオブジェクトにしてみました。PHP的には文字列で格納してゴリゴリ追加していくというのも悪くはないのですが、個人的に…

表層系と処理系でコントローラー

このへんの続き。 http://d.hatena.ne.jp/noopable/20090201/1233445916 http://d.hatena.ne.jp/noopable/20090201/1233528374 これを実現したいとする。 処理の流れを再確認 ルーティング ページクラス(ページコントローラーを起動) どんなページにするの…

もうおまえらPHPerは正規表現をブログにうpするんじゃねえ!

と言われても仕方がないと、404の人が書いてらっしゃいます。 実を言うと、私も正規表現は苦手です。正直言って、いろんな勘違いをそのまま公開している口なので、もうそこは「ごめんなさい」としか言えません。*1 個人差のある問題なのに、PHPerはと言われ…

PHPの配列記法で関数オブジェクト

C++などは()をオーバーロードして関数オブジェクトを作るらしいですが、PHPでも配列記法やアロー演算子のオーバーロードが可能なので、似たような関数オブジェクトは作れそうです。 http://d.hatena.ne.jp/noopable/20090316/1237166080 ここでやった手法は…

Webフレームワークとノーフリーランチ定理

ちょっとでもフレームワークの流儀や対象範囲から外れたことをやろうとすると、 とてつもなく手間がかかるか、全く出来ないかのどちらかで、 適切でないフレームワークを使うくらいなら、個別にスクラッチで書いた方がよっぽどマシという状況が起こりうる。 …

キャッシュのおさらい

フレームワークの性能を向上させる手掛かりとして、キャッシュについて考えてみます。 フレームワークによるパフォーマンス低下 フレームワークを利用する場合、パフォーマンスが犠牲になることはよくあります。フレームワークを設計する側からすると抽象化…

関数オブジェクトと関数型言語的手法の違い

PHPで関数オブジェクトを作ってみました。Webフレームワークでのキャッシュコントロールを正確に行うのが目的なのですが、作ってみると関数型言語との手法に違いがあることがわかりました。 関数オブジェクトAbstract*1 関数型の手法を几帳面にエミュレート…

Zend_Configはイテレーターを壊しても大丈夫になる。。

イテレーターって、要素をunsetしたら無効になるもんだと思ってましたが、unsetしても動作するのが普通なんでしょうか。Zend_Configがunsetしてもnextが有効になるような実装に変わるようです。

Viewの挙動に、もやっと

Zend_View周辺(ViewRenderer、Zend_Layout、Zend_Controller_Action)の仕様にもやっとしてます。 ViewRenderer http://d.hatena.ne.jp/noopable/20090211/1234300771 ここでも書きましたが、ViewRendererを有効にすると、基本的にViewRendererのビューオブジ…

Zend_Configでグローバルセッティング

フロントコントローラーに安全かつ柔軟な設定レジストリを作ってみました。 上書き禁止なfrontControllerのZend_Config フロントコントローラーを拡張して、ReadOnlyなZend_Configオブジェクトを持たせます。 たとえば、フロントコントローラーで _config; }…

Zym Framework

Zend FrameworkベースでZend Frameworkに積極的なフィードバックを行っているZym Framework。そのzym.appがZend_Applicationとしてリリース準備されているようです。 zymのApplicationについては、下記のドキュメントを流し読みしてみました。 http://www.zy…

ヘルパーブローカーとヘルパーの初期化タイミングとビューbasePathの変更について

アクションコントローラーの再利用性を考慮するとViewRendererはなるべく使いたい。でも便利なものほど内部はブラックボックスになっていて微妙にわかりにくいことがあるのでメモ。 検討課題 アクションコントローラーを_forwardまたはActionStack等で使いま…

hostsが改ざんされた・・・

ちょうど、7日頃からxampp環境からZend Server環境への移行テストをしていたんですが、10日にも関連テストをしこしこやってました。なぜかlocalhostのZend Serverが応答しなくなり、しばらく悩みましたが・・・hostsの改竄に気づいてビビりました・・・ い…

Zend Server でphpUnit(2)

http://d.hatena.ne.jp/noopable/20090308/1236483530 http://d.hatena.ne.jp/noopable/20090309/1236570981 まとめると、Zend ServerでphpUnitを使うときは Zend Extensionとxdebugは共用できない。(vistaの場合かつ標準のバイナリ) Zend Extensionを使う…

フレームワーク仕様とアプリケーション仕様の狭間に

フレームワークはカップリングを減らし、コンポーネントのメンテナンス性と品質の向上を考えるべきだと思う。 アプリケーションは疎結合なフレームワークを「結合」させて組み上げます。結合仕様がアプリケーションの骨組みになり、目的に合致したアプリケー…

Zend ServerでCLI

http://d.hatena.ne.jp/noopable/20090308/1236483530 でxdebugのロードが確認できたので、設定を確認してやりなおしてみました。 php.iniでZendExtensionManager.dllのロードを抑止した時の動作ですが、ローカルユーザー(管理権限あり)で通常通り起動する…

Zend Framework PHPUnit

いままで、テストにはSimpleTestを使っていました。 CakePHPやethnaだとSimpleTestを使っていると思います。 ethna http://ethna.jp/ethna-document-dev_guide-misc-unittest.html CakePHP http://bakery.cakephp.org/articles/view/testing-models-with-cak…

Zend ServerとZend Debugger

Zend Studio for Eclipseを使っている場合、ローカルにインストールしたZend Serverとの間でデバッグセッションを開くために必要は設定はない。 インストールしたら、そのまんま使えるっぽい。Zend Studio 4の時は結構いろいろ設定したと思うが、ローカルで…

Zend ServerとSVN連携

Zend ServerをローカルSVNリポジトリのアクセス用に使う時は、Subversionに添付されてくるmod_authz_svn.soとmod_dav_svn.soをC:\Program Files\Zend\Apache2\modulesにコピーする。実際には、コピーせずにインクルードするディレクトリを指定するだけでもい…

Zend Serverを試す

Zend Serverがβリリースされているので、ローカルで試してみることにした。xamppと比べてみるのもいいかなと。 ダウンロードとライセンスの取得 http://www.zend.com/products/server/downloads ここからトライアル版とトライアルライセンスを取得する。※ラ…

Zend Serverでpearをインストール(Windows VISTA)

Windows 7のリリース間近で影の薄いVISTAでの話。VISTA使いはUACオンが前提として。 ZendServer環境でpearを使うには C:\Program Files\Zend\ZendServer\bin\go-pear.bat を起動すればいいんだけど、UACオンのばあいはそのまま起動してもダメ。管理者で実行…

Router仕様を逆に考えてみるテスト

ZendFrameworkでは、リクエストオブジェクトにはリクエストが格納されており、これの一部をルーターに投入することで、ディスパッチすべき情報をリクエストオブジェクトに格納させてディスパッチする。 逆に考えてみる。ルーターおよびルートは単なるツール…

スタティックルートを集約してみた

部分一致ルールと再帰ルーターを実装したので、もう一つ、スタティックなルートを集約して扱うルートを作成した。 主にCMSなどでサイト内のセグメントを分割したり、独立ページを自由に配置したいときなどに利用する。 Zend_Controllrer_Router_Route_Static…

とりあえずリポジトリの場所だけ

オレオレ用の公開リポジトリを作った。まだ、wikiに1ページ追加しただけ。 http://code.google.com/p/zflower/ SVNの連携のうまい手は? 通常だと、社内ローカルSVNで作業するんだけど、公開用にアップするときはどうするのが正解なんだろう。 MercurialやGI…

逆引きルート名は使いやすいのだろうか。

ZendのMVCで単純にデフォルトのモジュールルートを使っている分には特に困ることはないのだが、CMSライクにURLをフルカスタマイズして利用する場合、逆引きの使い方にやや不安が・・・ リンク先はどのルートに格納されている? たとえば、あるページから別の…

simpleXMLでsjisの日本語タグも扱えるらしい。

simpleXMLでShift_JISの日本語タグも扱えるらしい、とのことで。 シフトJISでマルチバイトなタグで構成されたXMLファイルがsimplexmlで扱えるのか試してみた。結果からいうと「すごい!」「使える!」。 http://php.tekmemo.net/?p=967 DOMでも使えるか確認…

ルーティング:部分一致ルートと再帰構造ルーティング

http://d.hatena.ne.jp/noopable/20090215/1234653729 ここでも書いたが、Zend_Controller_Router_Rewriteの実装は、すべてのルートをグローバル的に保存し、順にチェックする。 それでもいいが、ルーティングのルールを組み合わせたり、遅延登録をさせたい…

ZFアプリケーション内で変数スコープの管理とZend_Registry

前記事で、Zend_Registryの多用には要注意とだけ書いて、自分なりの使い方を書いてなかったのでメモ http://d.hatena.ne.jp/noopable/20090228/1235784269 とりあえず、基本パターンのおさらい 実行時設定はフロントコントローラーに登録する http://d.haten…