実装したものと実装のための情報。
このWikiを洗練させるための試作。
http://x.pmint.name/


プロトタイピング05 Edit

検索/フォーマットは検索Elementに含める。

p05.svg

とりあえず利用者はUserクラスで、権限は固定値で。

資料 Edit

やること Edit

順不同パス Edit

まだ紹介してない。
「はてなブックマークのタグ絞り込みのように順不同

multi-gram→ページ名 Edit

プレビュー Edit

  • PagenameのWiki(-name)部分補完

下位展開 Edit

自動リンク Edit

リンク規則、danglingリンク規則、ページ名(フルパス)→内部名

ページ名…Pagename

自動リンク下位展開を考慮。一部を#化してリンク
自動リンク規則…PlainsAutoLink追加→HTML化のときに他のPlains系と異なる出力になるので不可。Notations系として実装するならフレームワークにPatternを提供しないと。
ページ作成記法ページ編集記法…パラメーターはデフォルト値。作成は状況により編集に、編集は状況により追記になる。
自動リンク規則は相対パス→絶対パス変換に一手間加えたもの。

プレビュータイムマシンとサブセット Edit

プレビューWiki
Wiki(-name)の補完ルールを変える。Pagenameクラスで対応すればいいだけ。
リクエスト-レスポンス間にWiki(-name)は一定。
存在しないページはデフォルトWikiから探す。デフォルトWikiにも存在しないなら、プレビュー用Wikiのページが存在しないときの処理。

タイムマシンWiki
自分が見てきた履歴ページ/履歴は(同じ見解を見てる)みんなの履歴
Revisionの補完ルールを変える。Pagenameクラスで対応すればいいだけ。
リクエスト-レスポンス間にRevisionは一定。
存在しないページは存在しないものとする。


サブセットWiki
Element単位で含まれるページが変わる。各Elementがページセットを扱う必要がある。

ほか Edit

  • これまでのプロトタイプでやり残していること

プラグイン Edit

名称「PageElement」または「Element」。「Notation」は記法なのでRegexを使って定義するもの。「プラグイン」は実装の仕方なので使わない。

プラグイン側で定義できるものはクラス定義で Edit

データ変換 Edit

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

もしWikiNotationプラグインをまったく使えないWikiEngineを作ったら…
テキストを記録するだけ。
ファイル名とテキストを与えると記録、ファイル名のみならテキストを出力。

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

アカウント Edit

利用者

派閥 Edit

派閥[?]

プラグインは既存クラスの「プラグイン Edit

  • Usecaseプラグイン
    Plugin/Usecaseを実装。
    SubUsecaseも使うならクラス名自由。
    フレームワークは関わらないので。リクエストの任意のパラメーターを使っていい。
  • PageElementプラグイン
    Plugin/PageElementを実装。

継承をするよりもコードテンプレート

クラス Edit

→クラス[?]
X

クラス名は…
View::ユースケース名::リクエスト名、Control::ユースケース

  • PageElements
    記法別クラスの上位クラス。
    記法別クラス(Notations)はWikiTextを読んで自身が理解できる記法だけオブジェクト化する。
    WikiTextの先頭からではなく、記法別にオブジェクト化。

Edit

クラス図

クラス図

フレームワーク間の関係 Edit

HTMLを要求するのはフレームワーク/Webアプリケーションのほう。
WebアプリケーションはWikiEngineを3回呼ぶ。

  1. エントリーポイント
  2. フレームワーク/Webアプリケーション
    Xオブジェクトを生成。
  3. フレームワーク/WikiEngine
    Xオブジェクトを作る(だけ)。
  4. フレームワーク/Webアプリケーション
    Xオブジェクトにリクエストを伝える(そのまま渡すのではなく、変数の形で)
  5. フレームワーク/WikiEngine
    自身の状態を変化させる。状態は永続化する。
  6. フレームワーク/Webアプリケーション
    XにHTMLを要求。
  7. フレームワーク/WikiEngine
    HTMLを生成。
  8. フレームワーク/Webアプリケーション
    HTMLにヘッダーを付けてWebページ化。

Wiki、Entry、Side、Revision Edit

  • Entry(項目)
  • Side(見解
  • Revision(

いずれもPageクラスのインスタンス名。
ただし、実体があるのはRevisionだけ。その名を変えたのがEntry、Side。


WikiはEntryの構造体。
ルートページから始まるツリー構造。

各Entryもそれぞれツリー構造。

つまりツリーの要素からまたツリーが始まる2段ツリー構造。

エラーレベル Edit

  • 利用者向け情報 Info
    不正なリクエストなど。ページメッセージ欄に出力。
    X/Error/Info[?]
  • 警告 Warning
    デバッグ用ログ出力と管理者グループ宛メールに出力。
    処理続行。
    X/Error/Warning[?]
  • 致命的エラー Fatal
    処理中断。
    開発時のアサーション違反はエラー、運用中は警告だけ。
    X/Error/Fatal[?]

排他制御 Edit

更新コマンドのキューイング。
キューと要素の関係。
キュー→ファイル(名前順)
要素→永続化されたCommandオブジェクト。
ファイルロックは…PageFactoryが永続化されたオブジェクトを復帰/保存するときと、オブジェクトが自身の関連ファイル(他のオブジェクトの所有物でないファイル)を操作するときくらい。
モデル系クラスでは自分で自身を書き換える。他のクラスを扱うのはPageFactoryくらい。

フレームワーク/Webアプリケーション

Componentの使い方 Edit

  • WikiEngine(の代表的なクラス)を1つのComponent(MVCセット)にする
    WikiEngine内部ではクラス間はWikiNotationで関連するので。似ているけど別の仕組み。
    UsecaseやRequest、Query(検索/クエリーではない)もWikiEngineの一部。Componentの<<control>>や<<model>>部分になる。
    WikiEngineの全クラスをComponentにしなくていい。フレームワーク/Webアプリケーションと関わりのあるクラスだけComponentを継承
  • サイトのグローバルナビを1つのComponentにする

ASP.NETを使うなら Edit

ViewとControllerはASP.NET MVCのもの。
非ASP.NET MVC。Wiki - View(.aspx) - Controller。Viewはマスターページのようなものを1つだけ。
プラグイン無し。ControllerでReadなどを実装。というかControllerがプラグインのようなもの。

フレームワーク/WebアプリケーションはASP.NETと競合するので後回し。
フレームワーク/WikiEngine以上を作る。

実装からTips作成 Edit

実装からTips作成、よりよいコードのヒント集め。
実装以外にも、アイデア、方式、UIなどでも。