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


プロトタイピング05 Edit

やること Edit

概要 Edit

abstract.svg

docs.google.com

fw/Web Edit

MVC.svg

docs.google.com

資料 Edit

フレームワーク Edit

:t/Webフレームワーク部分と、その上の:t/Wikiフレームワーク部分。
ページ/:t/要素が動く環境を作る。
ユーザーからのリクエストを対応する要素に伝えて、その結果をレスポンスに変える。

権限 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

クラス 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くらい。

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などでも。

仕様の分け方 Edit

MVCの観点で。
1. UI
2. フレームワーク
3. ページ
4. 運用、利用法

フレームワークは空気。ページが本体でユーザーがそれを利用できるようにするのがフレームワークの役目。

UIの内訳
1. 読みUI
ページ/履歴含む。
2. 書きUI
エディターなども。
3. 探しUI
検索の他に関連情報やおすすめの類も。
4. 組み立てUI
管理とWiki構築。テンプレートデータコンテキストなどページ/要素を使ったプログラミング部分。