2005-11-01から1ヶ月間の記事一覧

エラーの扱い方と言語要素

PHP

Moonyは原則としてPHP4の環境で動くようにしているので、exceptionは使っていない。でもPHP5の環境で使うとしたら、DB関連のエラーなどはexceptionにした方がいいのだろう。そうすることで構造的な強度は確保できるだろうが、気軽さという面ではどうだろうか…

エラーハンドリング

/moony/util/ErrorHandler.class.php メソッド: forward($message, $file, $line) 処理はhandleメソッドに委譲 $codeにはE_USER_ERRORを引数として設定 メソッド: handle($code, $message, $file, $line) /moony/util/Logger.class.phpを用いてロギング $cod…

DBアクセス用クラス構想

データベースの使用を前提としない でも、使うこともあるでしょう ライブラリとして提供する(/moony/util/Dao.class.php) PEAR::DBのラッパークラス 検索メソッドの引数はプレースホルダーを含むSQLと、パラメータ配列 パラメータのエスケープは自動でして…

設計の単純化

お仕事の話。 設計を単純化すること 仕様の単純化 意思の疎通がしやすい 仕様漏れをできるだけ減らす 仕様変更が少ないのでモチベーションが保たれる プロジェクトのゴールの明確化 アプリケーション設計の単純化 扱いやすいフレームワークの選定 モジュール…

ライセンス

どうしようかいろいろ悩んだ結果、内部で利用しているSmarty-Lightと同じLGPLに。現在ソース公開に向けて準備中。コーディングは全体の80%ぐらい終了。あとはドキュメントの整備…。どこまで書けばいいのかな。

Loggerの実装

サイト構築用の簡易フレームワークにログ出力機能は必要か まずログなんて出さない その都度出していたらファイルサイズが巨大化 ただし、DBを使う場合はエラーログだけ出力したい ごくごく単純な機能だけ用意しておくことに PHPのLogger PEAR::Log 割と使い…

FrontControllerパターンのURI設計

FrontControllerパターンを使う FrontControllerのファイル名を必ずURIに含まなくてはならない 例えば、/index.php?action=hogeとか 格好悪いので対策を考える PATH_INFOを使う /index/action/hogeとか、/index/hogeにできる ただし、ファイル名の代替文字列…

Smarty-Lightで気になるところ

assignできるのは文字列または配列のみ オブジェクト/クラスをassignできない スピード優先のためサポートされていない模様 PHP4のクラスが重いため DTOのようなオブジェクトは使用不可能 連想配列を使う 多次元配列を使う テンプレートリソースを使用でき…

コード中のコメント作法

コード中にコメントを書く 当たり前のこと 前にいた会社の新人研修でCOBOLを勉強したとき、執拗に書けといわれた 今でもきちんと書くほうだと思う、仕事ではJavadocもかなり書く そういえば自分用のライブラリでもJavadocすごく書いてた 最近、過剰なコメン…

思考の過程の表現方法

だらだらと文章で書くよりも、箇条書きで簡潔に できるだけ短く 頭の中の整理 アウトライン化することで構造的に把握できる 実際の方法は? PCの場合はプレーンなテキストファイル 構造はtabを用いた字下げで表現(自分ルール) テキストならgrepなどの検索…

テンプレートエンジン選択の悩み

Smarty(http://smarty.php.net/) 利点 大勢の人が使っているので情報が豊富 使ったことがある(手馴れている) 欠点 ソースサイズが大きめ 動作がすこし遅い(PHPのネイティブ記述に比べて) Smarty-Light(http://www.paullockaby.com/projects/smarty-li…

Front Controllerパターン

デザインパターンでいうと、MoonyはFront Controllerパターンになるのだろう。PHPではよく見かける手法である。リクエストを1つのスクリプトで受け取って、そこからコントローラクラスを呼び出すような仕組みだ。ただし、そのままだとURIがhoge.php?action=h…

クラス図

頭の整理のためにクラス図を描いてみた。ツールはJude。本来Java用なんだろうけど、UMLのスケッチにはPHPでも十分使える。黄色の部分がMoony側で用意される部分、水色の部分がSmarty-Lightのtemplateクラス、緑色の部分が実際に実装しなければいけない部分。…

Viewクラス

Controllerクラス内でインスタンス生成され、そのインスタンスはActionクラスのクラス変数として保持されます。テンプレート処理に関してはSmarty-Lightを使用します。 class View { var $_template; var $_items; var $_actionName; function View($actionN…

リクエストパスと起動するAction

以下のようにアクションを起動させる。ホームディレクトリへのアクセスがあった場合は無条件にHomeActionが起動するものとする。該当するクラスがなかった場合、Moony側で用意したForwardActionクラスが起動。単純なフォワード処理を行う。 リクエストパス …

配列型の戻り値

今携わっているプロジェクトでの思考の経過。 Strutsベースのフレームワークを作った DAOの検索メソッドの戻り値をjava.util.Listに統一した 内部でCommons DbUtilsのBeanListHandlerを使用 検索結果が0件の場合はnullを返すようにしたが、ループさせるとき…

Smarty-Light使用例

PHP

Smarty-Lightを使ってみた。とても簡単。付属するチュートリアルを見れば大体わかるが、テンプレートの記述方法がSmartyと若干違う。Smartyの場合は{ ... }で置き換える部分を記述するのだが、Smarty-Lightの場合はと記述する。ちょっとASPライクな書き方か…

テンプレート部分

MVCのViewにあたる部分はSmartyでテンプレート化しようと思っていたのだけれど、どうにも動作が遅いしソースサイズも大きいので躊躇する。できるだけ追加インストールが不要な形にしたいので、PEARのライブラリは使いたくない(HTML_Template_Flexyとか)。…