現在考案中のWikiEngineについて。
クラス設計→X
既存のWikiEngineについては→ tag:解析

 

目次 Edit

 
 

関連 Edit

 
 

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

 

WikiEngineとは Edit

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

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

利用者から与えられたデータを「ページ」化して保存するもの。
利用者からの要求に応じて「ページ」を切ったり貼ったり整形してから見せる。

HTML変換の内部処理 Edit

複数の記法→HTML変換を一度に行うために、変換後内容を用意してから置き換え。

  1. 記法分、探索
    始点・終点の位置を記録。重なりはエラー。
    挿入・削除の区別は要らない。対象位置と内容があれば十分。
  2. 末尾から順次置き換え
    位置がテキスト先頭からの距離なので置き換えの影響を受けないよう末尾から。

参考 Edit

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

方法 Edit

ページ要素とのつながり Edit

→機能/API[?]

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

ブックマークや履歴、ウィンドウタイトルを分かりやすくするために。
閲覧…なし
編集…-
追加…>
…など。

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

URLに付けるデータはネット上で共通のもののみ。
個人領域のデータ、状況に左右されるデータは置かない。
URLはどれもパーマリンクにすること。

というわけで、

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

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

新/旧、大/小などにする。
ソート順が分かる表現に。

負荷軽減 Edit

→負荷[?]

編集後の更新処理を分割。

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

ページを指定していないリクエストでは

  1. 最後に参照したページクライアントにあるデータによる)
  2. デフォルトページ(Wikiの設定による)

…を返す。

 

というわけで、トップページを見せたいときはトップページを指定したリンクを作り、通常はページを指定しないリンクを使う。
これで、静的なページからでもWebブラウザーの履歴を操作することなく、最後に参照したページに戻れる。
→URIとあわない。

記法の優先順位 Edit

機能には記法ごとに(機能ごとではなく)優先順位を定義。
これで複数のNotationに当てはまる場合や、Notationに包含関係がある場合に対応。

WikiEngine側で上書き可能。(Wikiの設定Notation→機能の追加と一緒に定義)
Notationクラス名→優先順位の表を定義。これが無い場合は機能側の定義を使用。

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

Edit

クラス間のつながり Edit

WikiEngine.gif

モデルはページ中心 Edit

  • ページ中心
  • MVCのVとCは決まりきっている
    Mはページページに関連するクラス。機能にはあるかも知れないし無いかも知れない。
    Cはフレームワークと各機能にある。
    フレームワークが持つVのクラスは1つだけ。それ以外には機能が独自に持つかも知れない。
  • 要点は機能の拡張性(可能性)
    • トリガーの種類
      ~の前/後、他の機能と比べたときの優先度、…
    • 出力箇所の種類
    • 呼び出し箇所、クライアント側スクリプト部分、ヘッダー、フッター、…