ここで作っている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'にあたるものと一対一対応。

現在作成中のWikiEngineフレームワーク

→User

X/User[?] Edit


利用者

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

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

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

キーワード:WikiEngine

キーワード:Wiki OR ウィキ

→Page

X/Page[?] Edit


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

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

属性を持つ。

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

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

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

参考 Edit

人力検索はてな
http://q.hatena.ne.jp/1186417853
→ Pages/Name

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

X/Pages/Name[?] Edit


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

思い付き Edit

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の集約にもなる。ネスト構造。

実装 Edit


→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


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

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

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

その他のクラス Edit


というわけで、

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

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


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

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

やること Edit

データ変換 Edit


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

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

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

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

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

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

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

アカウント Edit


利用者

派閥 Edit


派閥[?]

負荷軽減 Edit


→負荷[?]

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

設計 Edit


"WikiEngine"というクラスについて。

ウィキエンジンを表すクラス。

名前が決まり次第、クラス名も変更。

名称 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つでいい。