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

クラス構造 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でプラグインを呼んだときは仮のページ。その場合でも流れは同じ。

→ Pages/Name
→ PageElement(記法に書かれると呼ばれる)

  • 永続化
    • FlyweightFactoryでインスタンス生成
    • コンストラクターは非公開

X/Pages/Name[?] Edit

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

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

X/Pages/Property[?] Edit

ページ/属性

X/Pages/SystemProperty[?] 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

いろいろなプラグイン

その他のクラス Edit