実装のためのまとめ。


全体のクラス図 Edit

astah* file

%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3.png

特に関連の強いページ Edit

Edit

とりあえずPerlで。
UI抜きで。
フレームワークの実現と主要機能の実現を。

もし記法プラグインをまったく使えないWikiEngineを作ったら…
テキストを記録するだけ。
ファイル名とテキストを与えると記録、ファイル名のみならテキストを出力。

これにプラグイン独自のデータと処理を加えて、プラグインごとに違うHTML出力ができるようにする。
中心はプラグインを作るためのAPI。

Edit

Webアプリケーションのフレームワーク
フレームワーク/Webアプリケーションのみ。フレームワーク/WikiEngineはControlクラスから別途呼び出し。なのでフレームワーク/WikiEngineはこの図のModelにあたる。

20090927012512.png

フレームワーク/Webアプリケーション

  • ユーザー
    システム外。
  • メイン
    非オブジェクト指向の手続き指向。
  • クエリー(ユーザーから与えられたデータ)
    グローバルなデータ。なのでシングルトン。
    モデルによって書き換えられた後、ビューに参照される。
  • モデル系
    クエリーから入力(内部形式・独自形式、扱い方はモデル系クラス自身が知っている)、処理、保存(永続化)、クエリーに出力
  • ビュー
    クエリーから入力(文字列)、それをHTMLなどのテンプレートに埋め込む。

HTMLを要求するのはフレームワーク/Webアプリケーションのほう。
WebアプリケーションはWikiEngineを3度呼ぶ。

  1. エントリーポイント
  2. フレームワーク/Webアプリケーション
    WikiEngineオブジェクトを生成。
  3. フレームワーク/WikiEngine
    WikiEngineオブジェクトを作る(だけ)。
  4. フレームワーク/Webアプリケーション
    WikiEngineオブジェクトにリクエストを伝える(そのまま渡すのではなく、WikiEngineが理解できる形で)
  5. フレームワーク/WikiEngine
    自身の状態を変化させる。状態は永続化する。
  6. フレームワーク/Webアプリケーション
    WikiEngineにHTMLを要求。
  7. フレームワーク/WikiEngine
    HTMLを生成。
  8. フレームワーク/Webアプリケーション
    HTMLにヘッダーを付けてWebページ化。

Wikiエンジンのフレームワーク

フレームワーク/WikiEngine

Webアプリ部分で言うモデル系のこと。
スキンはビュー系。

直接関連はしない。コントロールクラス経由で呼び出し。

  1. ユースケース(コントロールクラス)→モデル
  2. ユースケース(コントロールクラス)→ビュー

でも、ビューがモデルを呼ぶこともあるかも。
決まりきっている部分。HTMLヘッダーとか、背景とか。多くのページが必要とする部分とか。ユースケース別にすることもない部分。


クライアント側で動くものはUI周辺のみ。

最低限必要なもの Edit

  • コア部分
  • 周辺部分

コア部分 Edit

20091103015312.png

  • データ変換
    • 記法を含むテキストをオブジェクト化する
    • 個々のオブジェクトから(HTMLなどの)別形式を得る
  • 記法クラスによる同オブジェクト間の同一性の評価
    検索で使用。類似度を算出。
  • 検索
  • オブジェクトの永続化
  • プラグインの使用
  • 構造化ページ
  • 代表とその決定方法
  • エラーレベル
    • 利用者向け情報 Info
      不正なリクエストなど。ページメッセージ欄に出力。
      WikiEngine/Error/Info[?]
    • 警告 Warning
      デバッグ用ログ出力と管理者ロール宛てメールに出力。
      処理続行。
      WikiEngine/Error/Warning[?]
    • 致命的エラー Fatal
      処理中断。
      開発時のアサーション違反はエラー、運用中は警告だけ。
      WikiEngine/Error/Fatal[?]
  • 排他制御
    • 更新コマンドのキューイング
      キューと要素のフォーマットは…
      キュー→ファイル(名前順)
      要素→永続化されたCommandオブジェクト
      ファイルロックは…PageFactoryが永続化されたオブジェクトを復帰/保存するときと、オブジェクトが自身の関連ファイル(他のオブジェクトの所有物でないファイル)を操作するときくらい。

[Prog]参照

データ変換(記法クラス) Edit

テキスト→オブジェクト→HTML
オブジェクト→永続オブジェクト
どれも記法クラスの役目。

周辺部分 Edit

特にWebアプリケーションとしてのWikiに必要なこと。

UI Edit

スキンに含まれるテンプレートと関連が深い。
最低限必要なUIだけ。

スキン Edit

ページの一種。それがテンプレートになる。
スタイルシートや画像は普通に作ればいい。

クラス Edit

アカウント Edit

利用者

20091108040844_original.png


必要なときに必要としているクラスから呼び出される。
主にユースケースを表すコントロールクラスから。

ページの構成 Edit

Wiki(サイト)─Entry(項目)─Side(見解)─Revision(

Wiki
WikiEngineのインスタンス
Entry
項目、ページ、Wikipediaでの1ページ
Side
見解
Revision
バックアップ、Wikipediaでの

コード Edit

今使ってるPerlのほか、PHP、Microsoftの、Rubyも。

codeなにがしに投稿してみる。


テスト用のUIを付けて…
コードはhttp://wiki.pmint.name/index.phpのどこかに置いて。

01/ Edit

tag:01 Edit