• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(プロトタイピング,目次,更新中);

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


#ls

----------

#contents

**プロトタイピング05 [#k2612436]

検索/フォーマットはPage.Elements.Findに含める。
利用者はUserクラス、データはPageになっているのでそれを読み込み。権限はページ属性で。

#ref(http://dl.dropbox.com/u/62172621/wiki/p05.png)
***資料 [#k0c266f2]
#lsx(tag=プロトタイピング05)
**そのうちやること [#fcfe5f45]
***順不同パス [#tec598d1]
まだ紹介してない。
「はてなブックマークのタグ絞り込みのように順不同」
***multi-gram→ページ名 [#t1002d7d]

***プレビュー [#g2c98fe5]
-PagenameのWiki(-name)部分補完

***下位展開 [#j4b73a03]
-権限
閲覧権
-利用者
-代表見解
Pagenameの見解部分補完

***自動リンク [#n5ac218c]
リンク規則、danglingリンク規則、ページ名(フルパス)→内部名

ページ名…Pagename

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

***プレビューとタイムマシンとサブセット [#r932212f]
''プレビューWiki''
Wiki(-name)の補完ルールを変える。Pagenameクラスで対応すればいいだけ。
リクエスト-レスポンス間にWiki(-name)は一定。
存在しないページはデフォルトWikiから探す。デフォルトWikiにも存在しないなら、プレビュー用Wikiのページが存在しないときの処理。

''タイムマシンWiki''
自分が見てきた履歴。ページ/履歴のほうは(同じ見解を見てる)みんなの履歴。
Revisionの補完ルールを変える。Pagenameクラスで対応すればいいだけ。
リクエスト-レスポンス間にRevisionは一定。
存在しないページは存在しないものとする。

----------------------------------------
''サブセットWiki''
Element単位で含まれるページが変わる。各Elementがページセットを扱う必要がある。
***ほか [#cdc3b43b]
-主要機能
--代表と投票
ページのデータとその設定方法。
--自動リンクとメタページ
投稿時の処理。
-ページ/章
投稿時の処理。
-利用者 User
ページの一種。ただしフレームワークから直接、利用者の情報として利用。
-構築 クラスなし
設定をページに記録すること。
-見解と投票 Pageで


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

**プラグイン [#ia66bb84]
-プラグイン/APIと[[データアクセス>ページ#f41cecab]]
Pluginインターフェイスを実装したクラス。
Wiki上の設定項目にプラグインクラス名を追加すれば呼ばれるようになる。

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

***プラグイン側で定義できるものはクラス定義で [#t5bd54cf]
-Notation(Regex)のデフォルトはプラグイン内部で定義。Wiki上で再定義されていればそれを使うように。
-連結するか否か(bool)
-Notationクラス名




***データ変換 [#j528038f]
テキスト→オブジェクト→HTML
オブジェクト→永続オブジェクト

もし記法やプラグインをまったく使えないWikiEngineを作ったら…
テキストを記録するだけ。
ファイル名とテキストを与えると記録、ファイル名のみならテキストを出力。

これにプラグイン独自のデータと処理を加えて、プラグインごとに違うHTML出力ができるようにする。
中心はプラグインを作るためのAPI。


***アカウント [#s0de27cc]
-ログイン、ログアウト
-UIとアカウントと権限設定
-アカウント管理

[[利用者]]


***派閥 [#h3dae9a5]
-ページの複製
-ページの統合
-アカウントとページの結び付け

[[派閥]]


**プラグインは既存クラスの「プラグイン版」 [#q6bd26fd]
-Usecaseプラグイン
Plugin/Usecaseを実装。
%%SubUsecaseも使うならクラス名自由。%%
フレームワークは関わらないので。リクエストの任意のパラメーターを使っていい。
-PageElementプラグイン
Plugin/PageElementを実装。


継承をするよりもコードテンプレート
**クラス [#g839899e]
→[[クラス]]
→[[X]]

-X(Wiki)
フレームワーク/WebアプリケーションのComponentにあたる。


クラス名は…
View::ユースケース名::リクエスト名、Control::ユースケース名


-PageElements
記法別クラスの上位クラス。
記法別クラス(Notations)はWikiTextを読んで''自身が理解できる記法だけ''オブジェクト化する。
WikiTextの先頭からではなく、記法別にオブジェクト化。
***図 [#a068f061]
[[クラス図>http://dl.dropbox.com/u/62172621/wiki/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3%20%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B003%20Web%E3%82%A2%E3%83%97%E3%83%AA%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E9%83%A8%E5%88%86.png]]

[[クラス図>http://dl.dropbox.com/u/62172621/wiki/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3%20%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B003%20X.png]]
**フレームワーク間の関係 [#d19defef]
HTMLを要求するのはフレームワーク/Webアプリケーションのほう。
WebアプリケーションはWikiEngineを3回呼ぶ。
+エントリーポイント
+フレームワーク/Webアプリケーション
Xオブジェクトを生成。
+フレームワーク/WikiEngine
Xオブジェクトを作る(だけ)。
+フレームワーク/Webアプリケーション
Xオブジェクトにリクエストを伝える(そのまま渡すのではなく、変数の形で)
+フレームワーク/WikiEngine
自身の状態を変化させる。状態は永続化する。
+フレームワーク/Webアプリケーション
XにHTMLを要求。
+フレームワーク/WikiEngine
HTMLを生成。
+フレームワーク/Webアプリケーション
HTMLにヘッダーを付けてWebページ化。

**Wiki、Entry、Side、Revision [#u7d37135]
-Entry(項目)
-Side(見解)
-Revision(版)

''いずれもPageクラスのインスタンス名。''
ただし、実体があるのはRevisionだけ。その名を変えたのがEntry、Side。

----------

WikiはEntryの構造体。
ルートページから始まるツリー構造。

各Entryもそれぞれツリー構造。

つまりツリーの要素からまたツリーが始まる2段ツリー構造。
**エラーレベル [#t6bc1961]
-利用者向け情報 Info
不正なリクエストなど。ページのメッセージ欄に出力。
[[X/Error/Info]]
-警告 Warning
デバッグ用ログ出力と管理者グループ宛メールに出力。
処理続行。
[[X/Error/Warning]]
-致命的エラー Fatal
処理中断。
開発時のアサーション違反はエラー、運用中は警告だけ。
[[X/Error/Fatal]]


**排他制御 [#q6171bfe]
更新コマンドのキューイング。
キューと要素の関係。
キュー→ファイル(名前順)
要素→永続化されたCommandオブジェクト。
ファイルロックは…PageFactoryが永続化されたオブジェクトを復帰/保存するときと、オブジェクトが自身の関連ファイル(他のオブジェクトの所有物でないファイル)を操作するときくらい。
モデル系クラスでは自分で自身を書き換える。他のクラスを扱うのはPageFactoryくらい。


[[フレームワーク/Webアプリケーション]]
**Componentの使い方 [#n24f2fd9]
-WikiEngine(の代表的なクラス)を1つのComponent(MVCセット)にする
WikiEngine内部ではクラス間は記法で関連するので。似ているけど別の仕組み。
UsecaseやRequest、Query(検索/クエリーではない)もWikiEngineの一部。Componentの<<control>>や<<model>>部分になる。
WikiEngineの全クラスをComponentにしなくていい。フレームワーク/Webアプリケーションと関わりのあるクラスだけComponentを継承。
-サイトのグローバルナビを1つのComponentにする
**ASP.NETを使うなら [#h197c0d4]
%%ViewとControllerはASP.NET MVCのもの。%%
非ASP.NET MVC。Wiki - View(.aspx) - Controller。Viewはマスターページのようなものを1つだけ。
プラグイン無し。ControllerでReadなどを実装。というかControllerがプラグインのようなもの。

フレームワーク/WebアプリケーションはASP.NETと競合するので後回し。
フレームワーク/WikiEngine以上を作る。
**実装からTips作成 [#h19c72ba]
実装からTips作成、よりよいコードのヒント集め。
実装以外にも、アイデア、方式、UIなどでも。