WiLiKi:アプリケーション

WiLiKi:アプリケーション

WiLiKiをwebアプリケーションのコンポーネントとして使ってみる試み…になるか? Makotoから移動。

要求仕様

ちと要求が多いので、1つずつやってみようのコーナー。

最初の動機

現実

当初の考え

WiLiKiを独自拡張するには

Shiro (2003/04/03 19:33:42 PST): 基本的には、WiLiKi本体はモジュールになっているので、 自分のアプリケーションから (use wiliki) しておけば、 WiLiKiを再インストールしても自分のアプリを書き換えずに済みます。

しかし、現在のwilikiモジュールからexportされているのは <wiliki>クラスとwiliki-mainのみなんで、ちょっとコンポーネントとしては 使いづらいですね。今コードを見直して、DBインタフェース部分や HTML生成部などをサブモジュールに分割しようとしているところです。

それまでは、(use wiliki) のかわりに (extend wiliki) として 下さい。すると、exportされていない内部手続きも自分のソースから 使えるようになります。但し内部手続きのAPIは将来のバージョンアップで 変更される可能性が多いにあるので、そのへん微妙に注意しつつ使って下さい。 (特に、次のバージョンで内部が色々変わるかもしれません)。

 (with-module wiliki (define format-footer ....))

内部手続きが全部見えちゃうのが気持悪いというなら、自分のソース内で 次のように書けば無理矢理一部の手続きだけexportさせてしまうことができます。

  (with-module wiliki
    (export format-page <page>))

これも場当たり的な手段ですが、とりあえずいじってみる時には便利かと。

色々やってみて、「wilikiのこの手続きは外から使いたい」とか、 「この手続きはこうなってると応用が効く」とかあったら教えて頂ければ、 wiliki本体を合わせてゆきます。

WiLiKiのサービスレイヤについて

WiLiKiは内部では次のような階層構造で構成されています。 一部の階層だけを利用することでWiLiKiのコンポーネント的な利用が 出来るかもしれません。いくつかアイディアを書いてみます。

データベースの差し替え

WiLiKiはデフォルトでgdbmを使うようになっていますが、 <dbm>のインタフェースを実装したクラスを用意すれば <wiliki>のコンストラクタにそのクラスを渡すだけで差し替えが可能です。 (但し、データベースの排他制御はメソッド内で行われることを 前提にしているので、<odbm>や<ndbm>だと不十分です)。

例えばMySQLとのブリッジを実装して、<dbm>抽象クラスのインタフェース メソッドを定義してやればMySQLをバックエンドに出来る…はずです。

また、バックエンドのデータベースに効率良い検索インタフェースが ある場合などは、wdb-* メソッドを定義しても良いでしょう。

wiki記法→HTML変換の利用

データを<page>クラスに合わせて用意してやればformat-*系のルーチンが 呼べるでしょう (マクロやWikiNameのフォーマッティング時にデータベース アクセスルーチンが呼ばれますが)。

<page>に余分な属性をつけたい場合は、<page>を継承したクラスを 作って、あとwdb-put!を定義してやる必要があるかな。 ここはpage->attribute-listみたいなメソッドをかましてやる方が良いかも。


More ...