ここで作っているWikiシステム(WikiEngineまたはWikiソフトウェアと呼ばれるもの)。
クラス構造 †
Actor †
リクエスト送信。PageNameとかUsecaseNameとかStepNameとかViewNameとか含む。
→fw/Web→fw/Wiki→Usecase
X †
X/Usecase[?] †
プラグイン。
コントロールクラス。
WikiEngineから呼ばれる。リクエスト毎に別クラス。
MediaWikiの'Action'、PukiWikiの'cmd'にあたるものと一対一対応。
→User
X/User[?] †
利用者。
ページを扱うクラス。Userが扱うページを特に「利用者ページ」と呼んでおく。権限情報が書かれているので特殊。
データはページ化されているので、このクラスが無くても読み/書きできる。書くのは利用者。
存在意義が薄い。ただ利用者ページにデータアクセスするラッパーでしかない。
- 鍵←UserID
→Page
X/Page[?] †
Wikiのデータを保存するもの。
利用者が手作業で書く。どういう記法を使うかでデータアクセス時の反応が違う。
属性を持つ。
URIでプラグインを呼んだときは仮のページ。その場合でも流れは同じ。
→ Pages/Name
→ PageElement(記法に書かれると呼ばれる)
- 永続化
- FlyweightFactoryでインスタンス生成
- コンストラクターは非公開
X/Pages/Name[?] †
ページ名。ValueObjectにするのが自然。
Page.rename(new Name(...)) ページ名を変更するときはNameインスタンスを作り直す。 ページ名変更時にやることがあるならrename()でできる。
X/Pages/Property[?] †
X/Pages/ShadowProperty[?] †
ページ/裏。
X/永続化[?] †
ページ以外も永続化。
データストアにはファイルシステム(flat files)使用。
- Page←PageName
- PageProperty←PageName
- Session←SessionID
X/Element[?] †
ページの構成要素。
記法から生成したオブジェクト。各種記法や一続きのプレーンテキスト部分などが1つのオブジェクトになる。
ElementがElementの集約にもなる。ネスト構造。
→PageElements
X/Elements[?]/… †
PageElementのサブクラス。プラグインはNotations系/Semantics系/DynamicNotations系/Plains系。
X/Elements/Notations[?]系 †
記法を統一する抽象クラス。
X/Elements/DynamicNotations[?]系 †
X/Elements/Semantics[?]系 †
X/Elements/Plains[?]系 †
ただのテキスト。