ここで作っているWikiEngineについて。

既存のWikiEngineについては「WikiEngine[?]」に。

ここで作っているWikiシステム(WikiEngineまたはWikiソフトウェアと呼ばれるもの)。
 

目次 Edit

 
 

関連 Edit

 
 

検索:フレームワーク 検索:WikiEngine
 
  • -

フレームワーク/WikiEngine Edit

クラス構造 Edit

Actor Edit


リクエスト送信。PageNameとかUsecaseNameとかStepNameとかViewNameとか含む。

fw/Webfw/Wiki→Usecase

X Edit


フレームワーク/WikiEngineの実装。

X/Usecase[?] Edit


プラグイン

コントロールクラス。

WikiEngineから呼ばれる。リクエスト毎に別クラス。

MediaWikiの'Action'、PukiWikiの'cmd'にあたるものと一対一対応。

利用者から与えられたデータをページ化して保存するもの。

利用者からの要求に応じてページを切ったり貼ったりしてから見せる。

→User

X/User[?] Edit


利用者

ページを扱うクラス。Userが扱うページを特に「利用者ページ」と呼んでおく。権限情報が書かれているので特殊。

データはページ化されているので、このクラスが無くても読み/書きできる。書くのは利用者

存在意義が薄い。ただ利用者ページデータアクセスするラッパーでしかない。
  • 鍵←UserID

→Page

X/Page[?] Edit


Wikiのデータを保存するもの。

利用者が手作業で書く。どういう記法を使うかでデータアクセス時の反応が違う。

属性を持つ。

URIでプラグインを呼んだときは仮のページ。その場合でも流れは同じ。

思い付き Edit


→ Pages/Name

→ PageElement(記法に書かれると呼ばれる)
  • 永続化
    • FlyweightFactoryでインスタンス生成
    • コンストラクターは非公開

X/Pages/Name[?] Edit


ページ名。ValueObjectにするのが自然。

実装 Edit

Page.rename(new Name(...))
ページ名を変更するときはNameインスタンスを作り直す。
ページ名変更時にやることがあるならrename()でできる。

URLクエリーに置くデータ Edit


URLに付けるデータはネット上で共通のもののみ。

個人領域のデータ、状況に左右されるデータは置かない。

URLはどれもパーマリンクにすること。

X/Pages/Property[?] Edit


ページ/属性

属性/継承を行なう。

X/Pages/ShadowProperty[?] Edit


ページ/裏。

X/永続化[?] Edit


ページ以外も永続化

データストアにはファイルシステム(flat files)使用。
  • Page←PageName
  • PageProperty←PageName
  • Session←SessionID

X/Element[?] Edit


ページの構成要素。

記法から生成したオブジェクト。各種記法や一続きのプレーンテキスト部分などが1つのオブジェクトになる。

ElementがElementの集約にもなる。ネスト構造。

というわけで、
  • 検索/クエリー
    →PageElements

X/Elements[?]/… Edit


PageElementのサブクラス。プラグインNotations系/Semantics系/DynamicNotations系/Plains系。

X/Elements/Notations[?] Edit


記法を統一する抽象クラス。

X/Elements/DynamicNotations[?] Edit


例えば自動リンク

記法はあるが決まっていないもの。

X/Elements/Semantics[?] Edit


検索でスコアを上げる記法

数詞やカラーコードなど。

X/Elements/Plains[?] Edit


ただのテキスト。

X/Plugins/... Edit


いろいろなプラグイン

…はURLクエリーに含める。

「次」や「前」という表現は使わない Edit


新/旧、大/小などにする。

ソート順が分かる表現に。

その他のクラス Edit

やること Edit

データ変換 Edit


テキスト→オブジェクト→HTML

オブジェクト→永続オブジェクト

もしWikiFormatやプラグインをまったく使えないWikiEngineを作ったら…

テキストを記録するだけ。

ファイル名とテキストを与えると記録、ファイル名のみならテキストを出力。

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

中心はプラグインを作るためのAPI

アカウント Edit


利用者

派閥 Edit


派閥[?]

負荷軽減 Edit


→負荷[?]

編集後の更新処理を分割。
  1. クエリー保存、ページ更新のキュー入れ
  2. 対象となるページの更新、関連するページ更新のキュー入れ
  3. 関連するページの更新(複数回)

設計 Edit

名称 Edit

クラス間のつながり Edit


WikiEngine.gif

検索時、オブジェクト間のつながり Edit


コラボレーション図 検索.png

ページがHTML出力する時、オブジェクト間のつながり Edit


コラボレーション図 HTML出力.png

ページプラグイン Edit


クラス図 ページ.png

モデルはページ中心 Edit

オブジェクトの生成 Edit


コラボレーション図 オブジェクト生成.png
  • クラス名とインスタンスの対応はFlyweightFactoryが決める。

コード Edit


プロトタイピング[?]の実装。

擬似言語 Edit


[フレームワーク/Webアプリケーションから呼ばれて…]
  1. セッションデータを受け取る。
  2. クエリーを処理する。
    1. ページを作っていろいろして保存したり、ページを開いていろいろする。
      ページ作成をFlyweightFactoryに要求して、得られたページにクエリーを渡すだけ。
    2. ページをHTML化、永続化する。
  3. HTMLを返す。

Perl Edit


code*:362

あとはX::Pageの永続化を。

プロトタイプではFlyweightFactoryを実装しない。

X::Pageのインスタンスは1つか2つでいい。