ここ数日で実はAnyaBBSの改定なんてのを少しやっている。
AnyaCounterの改定はほぼ終了しているので、AnyaBBSの改定さえ済めば少なくとも日本語版の方は旧サーバから新サーバに完全に移行ができる。まぁ、内容をそのまま引き継いで移植すれば、移行できることはできるわけだけど、さすがに今の状態はちとひどいので、少し直そうと。
改定、というとちょっとした手直しという聞こえがするが、実際やっているのは根本的な書き換えだったりする。多分旧プログラムからそのまま引き継がれるコードは全体の1割もないと思う。現在公開中のプログラムができ上がったのが更新履歴によると2003年の夏で、その時から比べると私のレベル自体もだいぶ上がっているので、設計哲学そのものが変化してしまっているんだよね。とは言っても旧プログラムが間違いだったというわけではなく、洗練された新プログラムができ上がったとしてもプロジェクトサイズを考えれば旧プログラムで十分、という結論になる可能性もあるにはあるんだけど。ま、何となく今の実力を使うとどうなるのかということを、自分で確認してみたかった、とかそんな感じだと思う。
設計は、おおよそベーシックなオブジェクト指向モデルにした。とりあえずMVCの分離では、モデルとしてメッセージ管理部分を分離。うまく継承を使って、今はTie::FileArray経由でファイルにデータを保存するコードしか書いてないけど、データベースを利用するにも簡単に拡張できるようにしてある。
ビューにはいろいろ迷うところだが、結局HTML::Templateを採用することにした。個人的にはそんなに好きって訳ではないんだけどね。でもコントローラが直接テンプレートを呼ぶわけではなく、ページごとにオブジェクトに分離してデータをカプセル化させて、それがテンプレートを呼ぶという形にしてある。だいたいテンプレートは違えど必要とするデータ自体は1ページにつきたいした違いはないはずなので。まぁ、そうじゃなくても出力をテキストに制限しない方針で考えると、当然の流れではあるんだけど(とは言ってもテキスト以外の出力をする予定はない)。
コントローラは実行プログラム自体がやるのではなく、専用モジュールに任せることにした。プログラム本体はただのコンフィギュレーションファイルに過ぎず、だいたいCGI::Applicationでやっているようなことをカスタムでやっている。というかCGI::Applicationのモデルは発想としては素晴らしいと思うんだが、モジュールとしてはあまり素晴らしくないと思うんだよね。ていうか種々の設定をハッシュ経由でやるのは間違いの元だし、ちゃんとしたモジュールを書いてインスタンスメソッド経由でやるべきな気がする。まぁ、動けばなんでもいいといえばいいわけだが・・・。
開発手法もかなり以前とは変化している。CVSでバージョン管理するのは当然として(って言っても前はしてなかったわけだが)、ちゃんとテストスクリプトも書きながら開発しているので、コードを書いている間も安心感が大きい。それにやってみて気がついたが、ごちゃごちゃ思想をごねているよりは、テストスクリプトを書いて、それに適合するプロトタイプをさっさと作ってしまった方が効率がいい。テストを書かないと「先に進まない症候群」になりがちである。
現在の進歩状況としては、とりあえずファイルを利用したモデルのプロトタイプと、日付順表示のビューのプロトタイプだけが完成したところ。ファイル数が多いのが実行速度の面で不利な感じがするけど、だいぶ見通しはいい感じで方向性としては間違ってない気がする。
でもHTML::Templateにフォーマットつき出力を出す構文ってないみたいねぇ。これは微妙に困るところ。でもフィルターを入れ替える機能とかはあるみたいだし、適当にハックしていくか・・・。
コメント
vim でタブを使う
CleanArchiver alpha その3
surrounding について考える