クラス設計。

なおす

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

Xとは Edit


フレームワーク/WikiEngine.

フレームワーク/Webアプリケーションから呼ばれる。

アプリケーション全体で使用されるものを定義。

クラス構造 Edit

X/Actor[?] 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/ShadowProperty[?] Edit


ページ/裏。

X/永続化[?] Edit


ページ以外も永続化

ページ以外も永続化

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

X/Element[?] Edit


ページの構成要素。

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

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

X/Pages/Element[?] Edit


→PageElement

PageElementがPageElementの集約。ネスト構造。
→PageElements

X/Pages/Elements[?]/… Edit


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

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