• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(コード,目次,更新中);

実装のための情報。

#ls

----------

#contents

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

**作るモノと実装方法 [#h44b203b]
-フレームワークとページ
ASP.NETを使うならフレームワーク/Webアプリケーションは不要。

その他、[[ウィキエンジンX/ウォークスルー]]にあるものを。

-基本的なNotation
--ページ埋め込み
--外部サイトの画像埋め込み(imgタグ化)
--リンク
リンク先と関連名を受ける。
-プラグインのうち Plugin/Usecase、Plugin/Notation
Usecaseのプラグイン版と、Notationのプラグイン版。
…をプラグインではなく組み込み済みクラスとして実装。
-WikiNotation (Notation)
プラグイン呼び出しの代替。
-検索
実体はNotationから呼ばれるプラグインだけどここではコントローラーとして。Notation同士の比較でスコア算出。
-検索/サブセットWiki
検索結果ページ内のプラグインに与えるページセットを変える。
ページ─版の間。ページのまとまり。
-ページ Page、PageFactory
DB

----

あとで。
-プラグインの仕組み
-代表と投票
あとで。ページのデータとその設定方法。
-自動リンクとメタページ
あとで。投稿時の処理。
-ページ/章
あとで。投稿時の処理。
-利用者 User
ページの一種。ただしフレームワークから直接、利用者の情報として利用。
-構築 クラスなし
設定をページに記録すること。
-見解と投票 Pageで
-データアクセス
テーブル記法も必要。
**変換 [#ne7b9a2a]
PageによるWikitext→HTML変換
-Wikitextのオブジェクト化
-Elementから(HTMLなどの)別形式を得る
HTMLならrender()というメソッド。

変換は多段階で。
+Wikitext->統一記法
記法の優先度順に検出。
+統一記法→PluginNotationElement
インスタンス化前に記法の連結を行うための段階。
連結の実態はパラメーターの連結。ここでコンストラクターに渡すパラメーターが決定する。記法はネスト可能なので構造化しないとパラメーターの終端が分からない。
+PluginNotationElement→PageElement
PageElementはデータアクセスに必要。
+PageElement→HTML
**プラグイン [#ia66bb84]
-プラグイン/APIと[[データアクセス>ページ#f41cecab]]
Pluginインターフェイスを実装したクラス。
Wiki上の設定項目にプラグインクラス名を追加すれば呼ばれるようになる。

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

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


***データアクセス… [#wf584b94]
ページ内の表(テーブル)記法の内容を配列かList(Of 配列)×配列かList(List (Of String))×List(Of String)に。
リスト(ol、ul)はList(Of String)に。
LINQでSQLのような扱い方が出来る。

ページに問い合わせ。欲しい型別にAPI用意。
 Page.getDictionaryData(notationName)
ページは自身の中に要求された型のデータ(Dictionaryなら定義リスト記法)があれば返す。なければnull。
NotationNameは定義リスト記法に書かれている名前。名前を指定しない場合は同じ型のデータをすべて1つにまとめて返す。

型
-Dictionary
定義リスト記法
-List
Ol、Ul記法
-Listと配列か、List×List
テーブル記法

----

プラグインは既存クラスのプラグイン版として作成。
-Usecaseプラグイン
Plugin/Usecaseを実装。
SubUsecaseも使うならクラス名自由。フレームワークは関わらないので。リクエストの任意のパラメーターを使っていい。
-Notationプラグイン
Plugin/Notationを実装。


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


**クラス [#g839899e]
→[[クラス]]

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


クラス名は…
View::ユースケース名::リクエスト名、Control::ユースケース名
***図 [#a068f061]
#ref(http://dl.dropbox.com/u/2267619/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,,75%)


#ref(http://dl.dropbox.com/u/2267619/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,,75%)

**フレームワーク間の関係 [#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くらい。


**Componentの使い方 [#n24f2fd9]
-WikiEngine(の代表的なクラス)を1つのComponent(MVCセット)にする
WikiEngine内部ではクラス間はWikiNotationで関連するので。似ているけど別の仕組み。
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などでも。


**Xが呼ばれるまで [#xe5f7bd5]
+エントリーポイント
(毎回最初に実行されるコード)
+Usecase
+指定されたUsecase配下の指定されたRequest
+(Requestによる)X呼び出し

Request→SubUsecase

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

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