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


プロトタイピング05 Edit

概要 Edit

abstract.svg

資料 Edit

権限 Edit

権限設定示。

:t/権限は「錠」と「鍵」の2種類。
:t/属性に書く。

:t/汎用記法:t/埋め込み機能を呼び出して権限情報を示。
ページとその属性名を全て:t/URIで指定・参照・ページ上にレンダリング。

下位展開 Edit

:t/下位展開は複数のページをまとめて見せる機能

対象になるページ:t/順不同:t/名前(:t/ページ/名前[?])での下位に位置するページ

ページ間の:t/リンク下位展開に対応する必要がある。
まとめられたページ:t/見出しとして示されるので、リンク先もそこへつなげなければならない。

ページごとに:t/権限判定と:t/代表の適用が必要。

プレビューモード Edit

:t/プレビューモードは:t/名前(:t/ページ/名前[?])の補完ルールに細工をすることで実現。
タイムマシンモードも同じ発想。

まだ投稿していないページ:t/セッションに一時保存。
セッションの実体は特殊な:t/ページ。一時的ではあるが:t/永続化することになる。

プレビュー中も:t/下位展開はある。

そのうちやること Edit

自動リンク Edit

プラグイン Edit

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

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

データ変換 Edit

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

もし記法プラグインをまったく使えない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内部ではクラス間は記法で関連するので。似ているけど別の仕組み。
    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などでも。