2009-02-01から1ヶ月間の記事一覧

Zend_Registryの多用には要注意

MLでの話を斜め読みしていると、パラメーターの引き渡しにZend_Registryを使うっていうアドバイスが乱発されているような気がする。 確かに、global変数にほいほい入れてしまうよりはマシなんだけど。そうは言っても、≒グローバルなZend_Registryを多用する…

なんで、compositeパターンにしなかったのだろう

どうも、そこはcompositeパターンでしょってところで微妙なaggregateになってるともろもろ苦しい。インターフェースが似通っているのに肝心なところで食い違いがあって、拡張実装がバッティングする。なんか、うーん・・・ いや、拡張するなってことなのかも…

fizzbuzz問題をなるべく冗長に解いてみた

fizzbuzzの話が何年か前に流行した時には、1linerでかっこよくってのが中心だったような気がする。マイナーな言語で書くっていうのもあった。 ここでは、冗長な言語 PHPで、肥満コードwを書いてみた。

お題(グループ分け)

某所でグループ分けのクイズが出ていたので反応してみた。 2人以上のn人を3人グループと2人グループに分け、それぞれのグループ数を出すにはどうしたら良いですか? なるべく3人グループが多くできるようにし、余りが出ないようにします。分類できないケース…

Zend_Dom_Query

DOMDocumentを使うのにCSSセレクタが使えるというので、Server Side Dom Scriptingに使ってみた。 処理の流れとしては、 XMLもしくはHTMLの文字列 をZend_Dom_Queryにセットする。 CSSセレクタで検索して結果を取得する。 結果はZend_Dom_Query_Resultオブジ…

モデルのAutoLoad

http://d.hatena.ne.jp/noopable/20090224/1235429939 昨日、プラグインローダーでモデルをロードするっていう話を書いたばかりだけれど、MLで、ZF1.8に入るのか入らないのか、Zend_Application_Module_Autoloaderの話題が出ていた。 これを使うと getModel(…

Zend_Loader_PluginLoaderでモデルクラスをロードする

モデルをロードする一番てっとり速い方法は、直接require_onceする方法かもしれない。 しかし、コントローラーを跨いだ処理だったり、コントローラーやビューを抽象化しながらモデルを扱いたい場合、個別に検索パスをハードコーディングする方法はできれば避…

回避策を考えるより、書き換えた方がクリーン。だからフレームワーク

オープンソースのCMSやフレームワークもいろいろあるけれど、それを業務ニーズにマッチさせようとすると何かと拡張が必要になる。 CMSの変更は黒魔術的 その時、それらのシステムが用意した拡張ポイント、プラグインやらコンポーネントやらで回避的に目的…

Dispatcher_AliasDirを書いた

一つのモジュールを複製して使いたいというニーズがあったので、エイリアスディレクトリにディスパッチできる機能を作ってみた。モジュールをコピペしたりsymlinkしたりするのではなく、たとえばビュースクリプトの一部だけ上書きするような使い方を可能にす…

Dispatcher_Standardでちょっとメモ

ちょっとわかりにくいところがあったのでメモ Controller_FrontのdispatchからController_Dispatcher_Standardのdispatchが呼ばれる。クラスのロードはloadClassなのだが、その際、_curModuleがセット済みであることが必要になる。_curModuleと_curDirectory…

参照透過性を考慮する

PHPでこんなことをやるのは邪道かもしれないが、オレオレFWの設計指針には関数型ライクな考え方を盛り込みたい。成果物の評価法は開発工数と機能性に偏りがちだけれども、自前のサービスに利用する場合なら、内面的なクオリティを高めておくことは意味がある…

Yii Blog Tutorial

http://www.yiiframework.com/doc/blog/ を読んだ ポートレット このチュートリアルででてくるポートレットだが、ブログのサイドカラム等に表示する、タグクラウドやログインメニューその他、システムによってはウィジェットと読んだりしているパーツ群のこ…

Zend_Queueを読んだ

http://d.hatena.ne.jp/noopable/20090212/1234388931 ここで書いた、コントローラー間のメッセージキューだが、Zend_Queueがincubatorに入っているので、少し意識して改造した方がいいかもしれないと思った。 Zend_Queueを読んだ Zend_QueueはアマゾンのSQS…

ZendFrameworkの気に入っているところ(1)

実はこれ http://framework.zend.com/community/contribute 企業でも近頃いろんなオープンソースを扱うようになってきたけれど、納品物にOSSを含む時、ライセンスの問題を本当にクリーンにしたかったらこういう手だろうなぁっていう。たとえば、このブログで…

Cacheフレンドリな設計

大概のフレームワークにはcacheコンポーネントがある。 効果的に導入できればパフォーマンスはかなり改善される。しかし、キャッシュのベストプラクティスはアプリケーション毎、対象にしているクライアントによって異なる。一般に、キャッシュを効果的に利…

部分一致ルートに関する考察

現在のルーターの仕様は、ルートをハッシュ配列に入れて、順に一致をチェックしながら決定する仕組み。あらゆるルートは検索を開始する前に登録するのが基本。URLのassemble時に名前指定でルートを特定してURLに変換するため、名前付きで登録されていないル…

ActionStackとViewRendererとZend_Layoutの連携

ActionStackとViewRendererとZend_Layoutを組み合わせると、ページ構成を決定するコントローラーから任意のコントローラー経由で収集したコンテンツをレイアウトの各セグメントで利用できるようになる。 たとえば、メニューに投入するコンテンツは$this->lay…

Zend_Controller2.0 PageControllerPattern

http://framework.zend.com/wiki/display/ZFDEV/Zend_Controller+2.0#Zend_Controller2.0-IntegratethePageControllerpattern Zend_Controllerのロードマップにページコントローラーパターンがある。 # wikiが古いだけで、ページコントローラーパターンって…

コントローラー間のメッセージキューを作った

あるアクションコントローラーから、複数の別のコントローラーに情報を伝達しながら処理を渡したいというニーズがあったので、既存の転送とは別にメッセージキューを利用して計画的な処理チェーンを作成できるようにしてみました。 このアイデアは、Presenta…

ミニメモ

View関連 ViewRendererを使っていると、特別な処理をしないかぎり、どのアクションコントローラーでも同じviewインスタンスを使用する。ViewRendererのinitViewの最後の処理でセットされている。 Viewに対して参照でモデルを投入する際は、コントローラー間…

バッドノウハウと机上の空論の間で

フレームワークの機能では素直に実現できない要件があるとき、 バッドノウハウ的に回避方法を編み出して実装する。 フレームワークをオーバーラップして要件にマッチするアーキテクチャを持ち込む。 希望としては、より少ないカスタマイズでありながら、バッ…

MVCとPAC

Presentation-Abstract-ControllerとModel-View-Controllerについてさらっと言及 MVCアーキテクチャはある程度の規模になると限界が訪れる。 http://c2.com/cgi/wiki?RecursiveModelViewController http://d.hatena.ne.jp/noopable/20090127/1233014697 この…

Zend_View用のフィルターで、コンテンツをZend_Dojoタブコンテナーに入れる

http://d.hatena.ne.jp/noopable/20090207/1233957428 これの続きで 要件 コントローラーの出力内容についてはViewRendererで作成 Zend_DojoのcontentPaneでラップ、その後タブコンテナでラップ レイアウトにはdojoソースを出せるものを使用 以上の要件を ht…

Zend_Dojo contentPaneでコンテンツをラップする

dojoのレイアウト機能を利用する場合、レイアウトの最小単位をcontentPaneとし、tabContainerやaccordionContainerなどのレイアウト用コンテナーに格納する。 フレームワーク的にはZend_DojoのcontentPaneでコンテンツを包むことになる。 ただし、Ajaxで動的…

Zend_View_Filterでデコレーター実装する。

Zend_View_Filterというのは、Zend_View_Abstract内の記述。実際には、プラグインパスを与えてる際のクラスプレフィックスとしてZend_View_Filter_がデフォルトになっているだけで、Zend_Viewのディレクトリにはフィルターは登録されていない。(いずれ、登…

アクションコントローラーの保存を多階層化

アクションコントローラーの保存を多階層化して、多数のコントローラーを整理できるようにした。 Zend_Controller_Dispatcher_Standardのコントローラー名解決でサブディレクトリ仕様にしてみた。 Zend_Controller_Dispatcher_Standardを継承したクラスを作…

スクラップandスクラップ

アクションコントローラーを量産すると管理が難しくなるので、ネストされた子アクションを呼ぶ形に構造化しようとアクションコントローラーと連動して作用させるサブコントローラーで実装したシステムがあった。 まぁ、結構ガシっと組んであったので、もし代…

表層系と処理系でコントローラーを区別する方策

「表層系のページ構成部分と、オブジェクトモデルの処理系を区分したい。」 http://d.hatena.ne.jp/noopable/20090201/1233445916 これを実現したいとする。 コントローラーを識別するのにどういう方法がいいのかを検討してみた。 モジュラーディレクトリ構…

基本的なコントローラーでの指定

個人的にはdojoの指定はコントローラーの基底にこんな感じで作ってある view); $this->view->dojo()->setLocalPath('/externals/dojo/dojo/dojo.js') ->registerModulePath('flower', '../../flower') ->requireModule('flower.Tools') //->requireModule('d…

Zend_Layoutで多層レイアウト -Zend_Dojo レイアウト機能を生かす-

Zend_Dojoを使ったレイアウトをこなすには、ViewRendererがビュースクリプトをレンダリングした後、かつレイアウトスクリプトでヘッダを吐く前に、Dojoベースのレイアウトはすべて準備しておく必要があり、それを解決する方法は・・・ってことで。この解決を…