実装したものと実装のための情報。
http://x.pmint.name/


プロトタイピング05 Edit

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

やること Edit

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

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


つぎ。

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

プラグイン Edit

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

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

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

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

クラス Edit

→クラス[?]

クラス名は…
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内部ではクラス間は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などでも。

Xが呼ばれるまで Edit

  1. エントリーポイント
    (毎回最初に実行されるコード)
  2. Usecase
  3. 指定されたUsecase配下の指定されたRequest
  4. (Requestによる)X呼び出し

Request→SubUsecase

プラグインの中にはUsecaseを提供するものも。
ページに埋め込むWikiNotationではなくViewを返す。

X自体がデフォルトのプラグインから呼ばれるようなもの。