現在考案中のWikiEngineについて。


クラス設計→X

既存のWikiEngineについては→ tag:解析
 

目次 Edit

 
 

WikiEngineとは Edit

関連 Edit

 
 

検索:フレームワーク 検索:WikiEngine
 
  • -

WikiEngineとは Edit


wikiのシステム部分。(サイトとしてのWikiは半分が利用者のアイデアでできている)

Xのシステム部分。(サイトとしてのWikiは半分が利用者のアイデア次第)

キーワード:WikiEngine
キーワード:Wiki OR ウィキ


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

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

HTML変換の内部処理 Edit


複数の記法→HTML変換を一度に行うために、変換後内容を用意してから置き換え。
  1. 記法分、探索
    始点・終点の位置を記録。重なりはエラー。

    挿入・削除の区別は要らない。対象位置と内容があれば十分。
  2. 末尾から順次置き換え
    位置がテキスト先頭からの距離なので置き換えの影響を受けないよう末尾から。

参考 Edit

人力検索はてな
http://q.hatena.ne.jp/1186417853
利用者から与えられたデータをページ化して保存するもの。

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

思い付き Edit

実装 Edit

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

ページ名ユースケース別接頭辞 Edit


ブックマークや履歴、ウィンドウタイトルを分かりやすくするために。

閲覧…なし

編集…-

追加…>

…など。

URLクエリーに置くデータ Edit


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

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

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

というわけで、

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

ユーザーページ/要素をつなぐもの。それとページ/要素の動作環境の提供も。

呼び出し順序
  1. 利用者
  2. フレームワーク/Webアプリケーション
  3. フレームワーク/WikiEngine
  4. ページ
  5. ページ/要素(各種機能)

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


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

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

認証について Edit


利用者認証とID取得はフレームワーク/Webアプリケーション

利用者IDを利用して、実用的な利用者情報を利用可能にするのはフレームワーク/WikiEngine

負荷軽減 Edit


→負荷[?]

編集後の更新処理を分割。
  1. クエリー保存、ページ更新のキュー入れ
    衝突時の警告ができなくなってしまうので不可。編集対象ページはすぐに更新、衝突したらそのときのレスポンスで利用者に知らせなければならない。
  2. 対象となるページの更新、関連するページ更新のキュー入れ
  3. 関連するページの更新(複数回)

WikiEngine/ Edit


ページを指定していないリクエストでは
  1. 最後に参照したページクライアントにあるデータによる)
  2. デフォルトページ(Wikiの設定による)

…を返す。
 

というわけで、トップページを見せたいときはトップページを指定したリンクを作り、通常はページを指定しないリンクを使う。

これで、静的なページからでもWebブラウザーの履歴を操作することなく、最後に参照したページに戻れる。

WikiNotationの優先順位 Edit


プラグインにはWikiNotationごとに(プラグインごとではなく)優先順位を定義。

これで複数のNotationに当てはまる場合や、Notationに包含関係がある場合に対応。

WikiEngine側で上書き可能。(Wikiの設定Notationプラグインの追加と一緒に定義)

Notationクラス名→優先順位の表を定義。これが無い場合はプラグイン側の定義を使用。

後からでも追加しやすいように優先順位は0以上の小数点数。

設計 Edit

名称 Edit

クラス間のつながり Edit


WikiEngine.gif

検索時、オブジェクト間のつながり Edit


コラボレーション図 検索.png

ページがHTML出力する時、オブジェクト間のつながり Edit


コラボレーション図 HTML出力.png

ページプラグイン Edit


クラス図 ページ.png

モデルはページ中心 Edit

オブジェクトの生成 Edit


コラボレーション図 オブジェクト生成.png
  • クラス名とインスタンスの対応はFlyweightFactoryが決める。

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

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

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

名称 Edit

クラス間のつながり Edit


WikiEngine.gif

検索時、オブジェクト間のつながり Edit


コラボレーション図 検索.png

ページがHTML出力する時、オブジェクト間のつながり Edit


Decoratorパターン。

コラボレーション図 HTML出力.png

ページプラグイン Edit


ページプラグインもDecoratorパターンを構成する。

クラス図 ページ.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つでいい。

プロトタイピング[?]の実装。

擬似言語 Edit


[フレームワーク/Webアプリケーションから呼ばれて…]
  1. セッションデータを受け取る。
  2. クエリーを処理する。
    1. ページを作っていろいろして保存したり、ページを開いていろいろする。
      ページ作成をFlyweightFactoryに要求して、得られたページにクエリーを渡すだけ。
    2. ページをHTML化、永続化する。
  3. HTMLを返す。

Perl Edit


code*:362

あとはX::Pageの永続化を。

プロトタイプではFlyweightFactoryを実装しない。

X::Pageのインスタンスは1つか2つでいい。

やること Edit

データ変換 Edit


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

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

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

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

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

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

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

アカウント Edit


利用者

派閥 Edit


派閥[?]