フレームワーク/WikiEngineの実装案。

全体 Edit

フレームワーク/WikiEngine Edit

フレームワーク/WikiEngine#be46ac08:『WikiEngineとは』

流れ Edit

  1. 利用者 → フレームワーク/Webアプリケーション
    クライアントアプリとユーザーエージェントの役目。リクエスト。
  2. フレームワーク/Webアプリケーション → フレームワーク/WikiEngine
    クエリーの解析、セッションの用意など。
    †プロトタイピング#d19defef:『フレームワーク間の関係』[?]
  3. フレームワーク/WikiEngine → ページと要素
    セッションページなどページ/要素のための環境を用意。ページが持つWikiTextからページ/要素の生成。
  4. ページ → ページ/要素
    ページでやること
  5. ページ/要素(各種機能)
    ページ/要素でやること
  6. フレームワーク/WikiEngine → フレームワーク/Webアプリケーション → 利用者
    レスポンスをデコレーションしてそれぞれふさわしい形式にして。
    †プロトタイピング#d19defef:『フレームワーク間の関係』[?]

実装案 Edit

X

ユースケースを実行するとき Edit

認証 Edit

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

フレームワーク/Webアプリケーションでやること:『フレームワーク/WikiEngine』

:t/利用者:t/アカウントの利用 Edit

:i/ログインはWebフレームワーク、ユーザー管理はWikiフレームワーク

フレームワークで扱うのはログイン認証)と、権限錠と鍵)の整合判定。

ページ構築時 Edit

ページの呼び出し Edit

記法(notation) → ページ/要素
ページを構築する方法。

:i/名前の同一視#sa0f0121 Edit

括弧書き記法ビルトインページ/要素

ページ名セレクター Edit

ページ/要素の導入と呼び出す仕組み Edit

プラグイン Edit

プラグインの仕組みはフレームワーク/WikiEngineのもの。
最も多いのはページ/要素プラグイン

:i/プラグインは既存クラスのプラグイン版

:/プラグインが使えるフック Edit

不要。
要素が動くトリガーは状況に依らない。状況次第なのはそれ以降の要素内の処理。つまり要素次第。

記法 Edit

記法の仕組み Edit

:t/機能とその実装である:t/要素、それを呼び出す:t/記法

:i/変換ルールはページ内で定義
:i/記法の書式

記法の優先順位 Edit

優先順位は表やリスト記法で特定のページに記述。
記述順が優先順。
正規表現→ページ/要素を複数記述。正規表現にもページ/要素にも重複があっていい。そうしたほうが設定しやすいし優先順位があるので解決できる。

WikiTextから得られるページ/要素 Edit

:i/Tokenize対象はNotationText Edit

NotationText解析・ページ/要素構築の仕組みを変更。

ページ構築後、要素を呼び出すとき Edit

ページページ/要素
ページ/要素ページ/要素 → …

ページ/要素

要素指定はセレクター全てURIで Edit

ページページ/要素
ページ/要素ページ/要素 → …

連携相手になるページ/要素を指定する方法。

参照記法は不要 Edit

全てURIで埋め込みで使えれば参照記法は不要。

:i/API向けパーマリンク Edit

全てURIで参照するための仕組み。
InterWikiName、InterIncludeでも使うのでUI(=API)。

ページ/要素に提供するもの Edit

フレームワーク/WikiEngineの主な機能は、利用者ページ/要素を扱えるようにすることと、ページ/要素を動作させること。

:i/ページ要素間の連携方法[?] Edit

:i/要素に書き込む方法 Edit

:i/クラス別のセッションデータ Edit

セッションをクラス間連携に使用するルール。
フレームワークの中で制御するので、個々の要素は値名と値を用意するだけ。簡単不自由なI/F.

フレームワーク/WikiEngineでやること:『ページ要素間の連携方法』

:i/要素のインスタンスID Edit

getElementById()のようなAPIに必要。

:i/ページのイテレーター Edit

ページ/要素のスキャンはVisitorパターン。その中でページ/要素のイテレーター(これもページ/要素)を使っている。
例えば検索にヒットしてページのプレビューテキスト取得に。

ページのイテレーターならPage/Factoryが提供するといい。
いろいろな順番で。

:i/ページに記述されたとき、Chain of Responsibilityで?[?] Edit

→すべての要素がResponsibilityになる。ネスト構造になっている要素は親要素から子要素が呼ばれるのでChainではある。
ページに記述されてないとき(リクエストのクエリー文字列に記述されたとき)も同じ処理になるよう工夫。

レンダリング Edit

ページページ/要素
ページ/要素ページ/要素 → …

形式変換/データコンテキスト反映。
フレームワーク/WikiEngineフレームワーク/Webアプリケーション

:i/フレームワーク/WikiEngineからの出力をレスポンスにする Edit

:i/ToWikitextはそのまま返す Edit

ToGenericNotationText()

:i/URLクエリーに置くデータ Edit

クエリー文字列にはよそに貼れるデータだけを。
年月が経っても有効なものを。

:i/ページタイトルにユースケース別接頭辞[?] Edit

閲覧時には無印なのがポイント。コピペで再利用しやすくなる。

レスポンスのコンテキスト Edit

ページページ/要素コンテキスト別の出力をする。
そのページの出力形式はHTTPリクエストで決める。

†:i/ユースケースチェイン[?]
出力付きユースケースの出力形式をリクエストで指定。
履歴をHTMLで/NotationTextで/印刷用HTMLで…。

実装は…
履歴ビューページ/要素で構築してからコンテキスト別変換。
差分の+ーマークもページ/要素で付けてからコンテキスト別変換。


編集ビューのRSS形式などもできる。

ページができあがってから Edit

ページの組み合わせ Edit

ページを複数組み合わせて1つのHTMLページを作る。

下位展開 Edit

ビューの問題。閲覧時以外にもページを扱う場面ならどこでも起こる。

:i/スタイルシートをページから生成 Edit

データアクセス可能なのは埋め込み解決後のページ
埋め込み前にアクセスできても煩わしいだけ。

WikiでWiki自身の設定を。

:i/負荷軽減に編集後の更新処理を分割[?] Edit

検索:永続化システム検索:永続化クラス)で実装。

ユースケース Edit

編集/削除 Edit

削除は編集の一種。

:Done/ページ削除のUI Edit

編集と削除には編集/承認を要する。モデレーション期間。

あとで Edit