Send to your Kindle RIGHT:[[:t/X]] [[:t/用語]] [[:t/実装]] [[:t/Wiki]] [[:t/Web]] ここで作っているWikiシステム(WikiEngineまたはWikiソフトウェアと呼ばれるもの)。 #contents **クラス構造 [#de2cc4d3] ***Actor [#jf1b5571] リクエスト送信。PageNameとかUsecaseNameとかStepNameとかViewNameとか含む。 →fw/Web→fw/Wiki→Usecase ***X [#l30856d1] フレームワーク/WikiEngineの実装。 ***[[X/Usecase]] [#cb7aff3b] プラグイン。 コントロールクラス。 WikiEngineから呼ばれる。リクエスト毎に別クラス。 MediaWikiの'Action'、PukiWikiの'cmd'にあたるものと一対一対応。 -権限判定 -閲覧 -編集 →User ***[[X/User]] [#b9d83f52] 利用者。 ページを扱うクラス。Userが扱うページを特に「利用者ページ」と呼んでおく。権限情報が書かれているので特殊。 データはページ化されているので、このクラスが無くても読み/書きできる。書くのは利用者。 存在意義が薄い。ただ利用者ページにデータアクセスするラッパーでしかない。 -鍵←UserID →Page ***[[X/Page]] [#g329967c] Wikiのデータを保存するもの。 利用者が手作業で書く。どういう記法を使うかでデータアクセス時の反応が違う。 属性を持つ。 URIでプラグインを呼んだときは仮のページ。その場合でも流れは同じ。 -錠(ユーザーページもそれ以外も) -鍵(ユーザーページの場合) → Pages/Name → PageElement(記法に書かれると呼ばれる) - 永続化 -- FlyweightFactoryでインスタンス生成 -- コンストラクターは非公開 ***[[X/Pages/Name]] [#x2ca02b3] ページ名。ValueObjectにするのが自然。 Page.rename(new Name(...)) ページ名を変更するときはNameインスタンスを作り直す。 ページ名変更時にやることがあるならrename()でできる。 -外部名4区分 --space --entry --opinion --revision -内部名 -永続名 主キーとしての内部名+検索用の外部名 †[[:i/永続化のキー]] ***[[X/Pages/Property]] [#q596b338] ページ/属性。 属性/継承を行なう。 ***[[X/Pages/ShadowProperty]] [#s06dc79c] ページ/裏。 ***[[X/永続化]] [#v4cae36a] ページ以外も永続化。 データストアにはファイルシステム(flat files)使用。 -Page←PageName -PageProperty←PageName -Session←SessionID ***[[X/Element]] [#zf1683e9] ページの構成要素。 記法から生成したオブジェクト。各種記法や一続きのプレーンテキスト部分などが1つのオブジェクトになる。 ElementがElementの集約にもなる。ネスト構造。 →PageElements ***[[X/Elements]]/… [#yaac2625] PageElementのサブクラス。プラグインはNotations系/Semantics系/DynamicNotations系/Plains系。 -レイアウトもテンプレートもビューも下位展開付きビューも -セレクターも -その他要素全て ***[[X/Elements/Notations]]系 [#j1b8ea74] 記法を統一する抽象クラス。 ***[[X/Elements/DynamicNotations]]系 [#o22fb640] 例えば自動リンク。 記法はあるが決まっていないもの。 ***[[X/Elements/Semantics]]系 [#t78923ec] 検索でスコアを上げる記法。 数詞やカラーコードなど。 ***[[X/Elements/Plains]]系 [#pa9cdd73] ただのテキスト。 ***[[X/Plugins]]/... [#a5a76337] いろいろなプラグイン型。 -X/Plugins/Elements/... --X/Plugins/Elements/Notation 記法を当てたり汎用記法から使うもの。 --X/Plugins/Elements/Semantic 検索スコア用の記法。正規表現で表現。 --X/Plugins/Elements/DynamicNotation 自動リンク系の。 --X/Plugins/Elements/Plain ただのテキストの別解釈をしたいときに。文字同一視とか。 -X/Plugins/Usecase ユースケース。利用者からのリクエストに応えるもの。 -X/Plugins/Page ページ/属性/型に対応するもの。 **その他のクラス [#s4bb4f74] #ls RIGHT:[[:t/X]] [[:t/用語]] [[:t/実装]] [[:t/Wiki]] [[:t/Web]] ここで作っているWikiシステム(WikiEngineまたはWikiソフトウェアと呼ばれるもの)。 #contents **クラス構造 [#de2cc4d3] ***Actor [#jf1b5571] リクエスト送信。PageNameとかUsecaseNameとかStepNameとかViewNameとか含む。 →fw/Web→fw/Wiki→Usecase ***X [#l30856d1] フレームワーク/WikiEngineの実装。 ***[[X/Usecase]] [#cb7aff3b] プラグイン。 コントロールクラス。 WikiEngineから呼ばれる。リクエスト毎に別クラス。 MediaWikiの'Action'、PukiWikiの'cmd'にあたるものと一対一対応。 -権限判定 -閲覧 -編集 →User ***[[X/User]] [#b9d83f52] 利用者。 ページを扱うクラス。Userが扱うページを特に「利用者ページ」と呼んでおく。権限情報が書かれているので特殊。 データはページ化されているので、このクラスが無くても読み/書きできる。書くのは利用者。 存在意義が薄い。ただ利用者ページにデータアクセスするラッパーでしかない。 -鍵←UserID →Page ***[[X/Page]] [#g329967c] Wikiのデータを保存するもの。 利用者が手作業で書く。どういう記法を使うかでデータアクセス時の反応が違う。 属性を持つ。 URIでプラグインを呼んだときは仮のページ。その場合でも流れは同じ。 -錠(ユーザーページもそれ以外も) -鍵(ユーザーページの場合) → Pages/Name → PageElement(記法に書かれると呼ばれる) - 永続化 -- FlyweightFactoryでインスタンス生成 -- コンストラクターは非公開 ***[[X/Pages/Name]] [#x2ca02b3] ページ名。ValueObjectにするのが自然。 Page.rename(new Name(...)) ページ名を変更するときはNameインスタンスを作り直す。 ページ名変更時にやることがあるならrename()でできる。 -外部名4区分 --space --entry --opinion --revision -内部名 -永続名 主キーとしての内部名+検索用の外部名 †[[:i/永続化のキー]] ***[[X/Pages/Property]] [#q596b338] ページ/属性。 属性/継承を行なう。 ***[[X/Pages/ShadowProperty]] [#s06dc79c] ページ/裏。 ***[[X/永続化]] [#v4cae36a] ページ以外も永続化。 データストアにはファイルシステム(flat files)使用。 -Page←PageName -PageProperty←PageName -Session←SessionID ***[[X/Element]] [#zf1683e9] ページの構成要素。 記法から生成したオブジェクト。各種記法や一続きのプレーンテキスト部分などが1つのオブジェクトになる。 ElementがElementの集約にもなる。ネスト構造。 →PageElements ***[[X/Elements]]/… [#yaac2625] PageElementのサブクラス。プラグインはNotations系/Semantics系/DynamicNotations系/Plains系。 -レイアウトもテンプレートもビューも下位展開付きビューも -セレクターも -その他要素全て ***[[X/Elements/Notations]]系 [#j1b8ea74] 記法を統一する抽象クラス。 ***[[X/Elements/DynamicNotations]]系 [#o22fb640] 例えば自動リンク。 記法はあるが決まっていないもの。 ***[[X/Elements/Semantics]]系 [#t78923ec] 検索でスコアを上げる記法。 数詞やカラーコードなど。 ***[[X/Elements/Plains]]系 [#pa9cdd73] ただのテキスト。 ***[[X/Plugins]]/... [#a5a76337] いろいろなプラグイン型。 -X/Plugins/Elements/... --X/Plugins/Elements/Notation 記法を当てたり汎用記法から使うもの。 --X/Plugins/Elements/Semantic 検索スコア用の記法。正規表現で表現。 --X/Plugins/Elements/DynamicNotation 自動リンク系の。 --X/Plugins/Elements/Plain ただのテキストの別解釈をしたいときに。文字同一視とか。 -X/Plugins/Usecase ユースケース。利用者からのリクエストに応えるもの。 -X/Plugins/Page ページ/属性/型に対応するもの。 **その他のクラス [#s4bb4f74] #ls