実装のためのまとめ。
全体のクラス図 †
https://www.dropbox.com/sh/6d15699bc8vded3/AADhSZL6RV4ySd_lHbLSFAM2a/wiki?preview=クラス図.png
特に関連の強いページ †
†
とりあえずPerlで。
UI抜きで。
フレームワークの実現と主要機能の実現を。
もし記法やプラグインをまったく使えないWikiEngineを作ったら…
テキストを記録するだけ。
ファイル名とテキストを与えると記録、ファイル名のみならテキストを出力。
これにプラグイン独自のデータと処理を加えて、プラグインごとに違うHTML出力ができるようにする。
中心はプラグインを作るためのAPI。
図 †
Webアプリケーションのフレームワーク
フレームワーク/Webアプリケーションのみ。フレームワーク/WikiEngineはControlクラスから別途呼び出し。なのでフレームワーク/WikiEngineはこの図のModelにあたる。
- ユーザー
システム外。 - メイン
非オブジェクト指向の手続き指向。- ユースケース
フレームワーク/WikiEngineのクラス。
編集とか、ページ作成とか、ページ閲覧とか。そういったものの処理フロー。他のクラスに依存しっぱなし。
- ユースケース
- クエリー(ユーザーから与えられたデータ)
グローバルなデータ。なのでシングルトン。
モデルによって書き換えられた後、ビューに参照される。 - モデル系
クエリーから入力(内部形式・独自形式、扱い方はモデル系クラス自身が知っている)、処理、保存(永続化)、クエリーに出力 - ビュー系
クエリーから入力(文字列)、それをHTMLなどのテンプレートに埋め込む。
HTMLを要求するのはフレームワーク/Webアプリケーションのほう。
WebアプリケーションはWikiEngineを3度呼ぶ。
- エントリーポイント
- フレームワーク/Webアプリケーション
WikiEngineオブジェクトを生成。 - フレームワーク/WikiEngine
WikiEngineオブジェクトを作る(だけ)。 - フレームワーク/Webアプリケーション
WikiEngineオブジェクトにリクエストを伝える(そのまま渡すのではなく、WikiEngineが理解できる形で) - フレームワーク/WikiEngine
自身の状態を変化させる。状態は永続化する。 - フレームワーク/Webアプリケーション
WikiEngineにHTMLを要求。 - フレームワーク/WikiEngine
HTMLを生成。 - フレームワーク/Webアプリケーション
HTMLにヘッダーを付けてWebページ化。
Wikiエンジンのフレームワーク
Webアプリ部分で言うモデル系のこと。
スキンはビュー系。
直接関連はしない。コントロールクラス経由で呼び出し。
でも、ビューがモデルを呼ぶこともあるかも。
決まりきっている部分。HTMLヘッダーとか、背景とか。多くのページが必要とする部分とか。ユースケース別にすることもない部分。
最低限必要なもの †
- コア部分
- 周辺部分
コア部分 †
- データ変換
- 記法を含むテキストをオブジェクト化する
- 個々のオブジェクトから(HTMLなどの)別形式を得る
- 各記法クラスによる同型オブジェクト間の同一性の評価
検索で使用。類似度を算出。 - 検索
- オブジェクトの永続化
- プラグインの使用
- 構造化ページ
- 代表とその決定方法
- エラーレベル
- 排他制御
[Prog]参照
データ変換(記法クラス) †
テキスト→オブジェクト→HTML
オブジェクト→永続オブジェクト
どれも記法クラスの役目。
周辺部分 †
特にWebアプリケーションとしてのWikiに必要なこと。
UI †
スキンに含まれるテンプレートと関連が深い。
最低限必要なUIだけ。
スキン †
ページの一種。それがテンプレートになる。
スタイルシートや画像は普通に作ればいい。
クラス †
アカウント †
→利用者
必要なときに必要としているクラスから呼び出される。
主にユースケースを表すコントロールクラスから。
ページの構成 †
Wiki(サイト)─Entry(項目)─Side(見解)─Revision(版)
コード †
今使ってるPerlのほか、PHP、Microsoftの、Rubyも。
codeなにがしに投稿してみる。
- フレームワーク/Webアプリケーション
code*:357 - フレームワーク/WikiEngine
code*:362 - ページ、|…|…|、''…''
code*:364 code*:375 - 検索/クエリー
code*:375
:i/検索/流れ - 利用者
クラス定義とOpenID認証のサンプルだけで良い。
code*:??? code*:412
テスト用のUIを付けて…
コードはhttp://wiki.pmint.name/index.phpのどこかに置いて。