フレームワーク/WikiEngineより

フレームワーク/WikiEngineの実装案。
  1. やること
  2. 全体
    1. フレームワーク/WikiEngine
      1. フレームワーク/WikiEngine
      2. 流れ
  3. これから考えること
    1. X
      1. 実装案
  4. ユースケースを実行するとき
    1. ユースケース
    2. 連携相手になるページ/要素を指定する方法
      1. 全てURIで
      2. 参照記法は不要
      3. :i/ユースケーススコープ
      4. :/ユースケースチェイン
    3. 認証
      1. API向けパーマリンク
      2. :t/利用者と:t/アカウントの利用
  5. ページ構築時
    1. 呼び出すページを特定する
      1. 順不同パス
    2. ページ/属性の用意
    3. ページの復帰/構築
      1. :i/名前の同一視#sa0f0121
      2. ページ名もセレクターで
    4. 記法
    5. ページ/要素の導入と呼び出す仕組み
      1. プラグイン
      2. 記法の仕組み
      3. 記法の優先順位
    6. ページから要素を作る方法
      1. 記法
      2. 記法の仕組み
      3. WikiTextから得られるページ/要素
    7. ページ/要素ができること
      1. ページ要素間の連携方法
      2. クラス別のセッションデータ
      3. :i/Tokenize対象はNotationText
  6. ページ構築後、要素を呼び出すとき
    1. 要素指定はセレクター/全てURIで
      1. ページに記述されたとき、Chain of Responsibilityで
      2. 参照記法は不要
      3. :i/API向けパーマリンク
    2. ページ/要素の導入と呼び出す仕組み
      1. プラグイン
      2. フレームワーク/エラーメッセージにクラス名
      3. :/プラグインが使えるフック
    3. ページ/要素に提供するもの
      1. :i/ページ要素間の連携方法[?]
      2. 簡単なAPI
      3. :i/要素に書き込む方法
      4. :i/クラス別のセッションデータ
      5. 要素のインスタンスID
      6. :i/要素のインスタンスID
      7. クエリーにどう反応するか
      8. ページのイテレーター
      9. :i/ページのイテレーター
      10. :i/要素がページに記述されたとき、Chain of Responsibilityで?
    4. レンダリング
      1. 機能/APIとは
      2. :i/フレームワーク/WikiEngineからの出力をレスポンスにする
      3. :i/ToWikitextはそのまま返す
      4. 機能/API/テスト用コード
      5. ページ/要素/UI
    5. ほか
      1. URLクエリーに置くデータ
      2. :i/URLクエリーに置くデータ
      3. ページタイトルにユースケース別接頭辞
      4. :i/ページタイトルにビュー別接頭辞
      5. レスポンスのコンテキスト
      6. フレームワーク/WikiEngine/同一視#sa0f0121[?]
  7. ページができあがってから
    1. ページの組み合わせ
      1. 下位展開
      2. 負荷軽減に編集後の更新処理を分割
      3. フレームワーク/WikiEngine/スタイルシートをページから生成
      4. :i/スタイルシートをページから生成
      5. :/負荷軽減のため編集後の更新処理を分割
  8. ユースケース別
    1. 編集/削除
      1. :Done/ページ削除のUI
  9. あとで
    1. フレームワーク/Webアプリケーション/再送
    2. :t/利用者と:t/アカウントの利用
    1. まだ
      1. 下位展開
      2. ページを扱う仕組み

やること Edit

全体 Edit

フレームワーク/WikiEngine Edit


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

フレームワーク/WikiEngine Edit


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

流れ Edit

  1. 利用者 → フレームワーク/Webアプリケーション
    クライアントアプリとユーザーエージェントの役目。リクエスト。
  2. フレームワーク/Webアプリケーション → フレームワーク/WikiEngine
    クエリーの解析、セッションの用意など。
    †プロトタイピング#d19defef:『フレームワーク間の関係』[?]

    :i/プロトタイピング#d19defef:『フレームワーク間の関係』
  3. フレームワーク/WikiEngine → ページと要素
    セッションページなどページ/要素のための環境を用意。ページが持つWikiTextからページ/要素の生成。

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

これから考えること Edit

X Edit


実装案。

:i/プロトタイピング#d19defef:『フレームワーク間の関係』

実装案 Edit


X

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

ユースケース Edit


ユースケースは機能拡張の中にもあるクラス。

プラグインの呼び出しに権限判定を付けるならユースケースクラスも必要。

ユースケース内で権限判定をするのでページを扱うということ。ページの扱いはフレームワーク/WikiEngineでやること

ユースケースビューページ)との関係が強いのでフレームワーク/WebアプリケーションではなくWikiEngineにする。フレームワーク/Webアプリケーションでもいい。

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

全てURIで Edit

参照記法は不要 Edit


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

:i/ユースケーススコープ Edit


Controller = Usecase

その中だけで有効なデータ。

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

:/ユースケースチェイン Edit


:/リクエスト時に選べるビュー

リクエストとレスポンスの分離。

…を一般化して複数のユースケースを連鎖させられるように。

認証 Edit


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

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

API向けパーマリンク Edit


全てURIで参照するための仕組み。

InterWikiName、InterIncludeでも使うのでUI(=API)。

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


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

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

ページ構築時 Edit


ページ

呼び出すページを特定する Edit

順不同パス Edit


ページ/名前

ページ/属性の用意 Edit


ページ/属性

属性継承を行なうのはページの役割。

今のところ:/ページ/裏では継承なし。

ページの復帰/構築 Edit


記法(notation) → ページ/要素

ページを構築する方法。

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


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

ページ名セレクター Edit

記法 Edit

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

プラグイン Edit


プラグインの仕組みはフレームワーク/WikiEngineのもの。

最も多いのはページ/要素プラグイン

記法の仕組み Edit


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

:i/変換ルールはページ内で定義

:i/記法の書式

記法の優先順位 Edit

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

ページから要素を作る方法 Edit

記法 Edit

記法の仕組み Edit


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

†変換ルールはページ内で定義[?]

†記法の書式[?]

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

ページ/要素ができること Edit

ページ要素間の連携方法 Edit

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


セッションをクラス間連携に使用するルール。

フレームワークの中で制御するので、個々の要素は値名と値を用意するだけ。簡単不自由なI/F.

:i/Tokenize対象はNotationText Edit


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

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

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


ページページ/要素

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

ページ/要素

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


ページページ/要素

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

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

ページに記述されたとき、Chain of Responsibilityで Edit


リクエストされたページにある要素は全て呼ばれる。

その中でどのクエリーをどう使うかは要素次第なので、別にChain of Responsibilityでなくてもいい。全ての要素がResponsibility.

参照記法は不要 Edit


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

ページではなくURLクエリーに記述されたときもChain of Responsibilityではない。Chain(連鎖)はするけど。

Androidのインテントのようなものでもない。送り先を決めてパラメーターを用意。戻り値のも要求する。

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


全てURIで参照するための仕組み。

InterWikiName、InterIncludeでも使うのでUI(=API)。

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

プラグイン Edit


プラグインの仕組みはフレームワーク/WikiEngineのもの。

最も多いのはページ/要素プラグイン

フレームワーク/エラーメッセージにクラス名 Edit


エラーメッセージの書き方。

競合も矛盾もない。

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

エラーメッセージはエラー対処のためのUIでもある。

検索がサイト間のハブサイト、エラーメッセージはその検索ユーザーを誘導する。

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


不要。

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

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


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

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

簡単なAPI Edit


簡単不自由なAPIと、面倒自由なAPIの両方を用意。

引数の違い。

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


例えばページ/要素のコンストラクターを2種類用意。どちらかを定義すれば要素として使えるように。

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


セッションをクラス間連携に使用するルール。

フレームワークの中で制御するので、個々の要素は値名と値を用意するだけ。簡単不自由なI/F.

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

要素のインスタンスID Edit

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


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

クエリーにどう反応するか Edit


要素の協調でリダイレクトをどう行なうか。:t/?

ページのイテレーター Edit


ページ/要素のスキャンはVisitorパターン。その中でページ/要素のイテレーター(これもページ/要素)を使っている。

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


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

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

いろいろな順番で。

(要素でなく)ページのイテレーターならPage/Factoryが提供するといい。いろいろな順番で。ページ間に構造はないのでページ内容は反映しなくていい。イテレーターになる。

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


→すべての要素がResponsibilityになる。ネスト構造になっている要素は親要素から子要素が呼ばれるのでChainではある。

ページに記述されてないとき(リクエストのクエリー文字列に記述されたとき)も同じ処理になるよう工夫。

:i/要素がページに記述されたとき、Chain of Responsibilityで

レンダリング Edit


ページページ/要素

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

形式変換/データコンテキスト反映。

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

機能/APIとは Edit


要素(機能の実装)がAPIを提供してもいい。制限しないだけ。サポートもしない。自由。

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


→ページ/要素/API[?]ページ名変更。

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


ToGenericNotationText()

機能/API/テスト用コード Edit


インストール時に動くか確認。

管理者が改造したときにも使える。運用しやすくなる。

UIは…ページ/要素クラス別のページ(複数のバージョンがある場合は下位ページでも作って)にあるテスト実行ボタンで。

テストが複数定義されていればその数だけボタンを表示するように。リフレクション→UIに反映。

テスト環境をどう作るのか。テスト用コードだけでできる:t/?

ページ/要素/UI Edit


拡張可能な要素のUIとは。

†UIを使うページ要素[?]

要素を呼び出すためのUI記法エディターと組み合わせて使う一大機能。

記法

汎用記法

ほか Edit

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

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


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

ページタイトルにユースケース別接頭辞 Edit

:i/ページタイトルにビュー別接頭辞 Edit


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

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


ページページ/要素コンテキスト別の出力をする。

そのページの出力形式はHTTPリクエストで決める。

:/ユースケースチェイン

出力付きユースケースの出力形式をリクエストで指定。

履歴をHTMLで/NotationTextで/印刷用HTMLで…。

実装は…

履歴ビューページ/要素で構築してからコンテキスト別変換。

差分の+ーマークもページ/要素で付けてからコンテキスト別変換。

フレームワーク/WikiEngine/同一視#sa0f0121[?] Edit


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

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

ページの組み合わせ Edit


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

下位展開 Edit


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

負荷軽減に編集後の更新処理を分割 Edit


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

フレームワーク/WikiEngine/スタイルシートをページから生成 Edit

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


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

WikiでWiki自身の設定を。

:/負荷軽減のため編集後の更新処理を分割 Edit


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

ユースケース Edit

編集/削除 Edit


削除は編集の一種。

:Done/ページ削除のUI Edit


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

あとで Edit

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


利用者の情報損失を防ぐ。リトライ可能に。使いにくくなるのを防ぐ。

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


†ログインはWebフレームワーク、ユーザー管理はWikiフレームワーク[?]

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

まだ Edit

下位展開 Edit


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

ページを扱う仕組み Edit