• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(フレームワーク,実装,設計);

現在考案中のWikiEngineについて。
クラス設計→[[X]]
既存のWikiEngineについては→ [[tag:解析]]

#br

*目次 [#cc67582c]
#contents
#br
#lsx(new=true);
#br

*関連 [#h79ad87b]
#related
#br
#lsx(tag=フレームワーク,new=true,except=^フレームワーク/WikiEngine(/.*)?$)
#br
[[検索:フレームワーク]] [[検索:WikiEngine]]
#br
----
*WikiEngineとは [#d78bd282]
RIGHT:[[:t/WikiEngine]]

wikiのシステム部分。(サイトとしてのWikiは半分が利用者のアイデアでできている)

[[キーワード:WikiEngine]]
[[キーワード:Wiki OR ウィキ]]


利用者から与えられたデータを「ページ」化して保存するもの。
利用者からの要求に応じて「ページ」を切ったり貼ったり整形してから見せる。
**%%HTML変換の内部処理%% [#cfcf01b3]
%%複数の記法→HTML変換を一度に行うために、変換後内容を用意してから置き換え。%%
+%%全記法分、探索%%
%%始点・終点の位置を記録。重なりはエラー。%%
%%挿入・削除の区別は要らない。対象位置と内容があれば十分。%%
+%%末尾から順次置き換え%%
%%位置がテキスト先頭からの距離なので置き換えの影響を受けないよう末尾から。%%
**参考 [#d6531d94]
:人力検索はてな|[[http://q.hatena.ne.jp/1186417853>http://q.hatena.ne.jp/1186417853]]



*実装 [#y3209a73]

**ページ要素とのつながり [#nad0a3e2]

→[[プラグイン/API]]
**ページ名にユースケース別接頭辞 [#k4c480b6]
ブックマークや履歴、ウィンドウタイトルを分かりやすくするために。
閲覧…なし
編集…-
追加…>
…など。
**URLクエリーに置くデータ [#c57c9c46]
URLに付けるデータはネット上で共通のもののみ。
個人領域のデータ、状況に左右されるデータは置かない。
URLはどれもパーマリンクにすること。

というわけで、
-検索/クエリー

…はURLクエリーに含める。


**「次」や「前」という表現は使わない [#f4686b39]
新/旧、大/小などにする。
ソート順が分かる表現に。

RIGHT:[[:t/コンセプト]]


**負荷軽減 [#se24e0c6]
→[[負荷]]

編集後の更新処理を分割。
+%%クエリー保存、ページ更新のキュー入れ%%
衝突時の警告ができなくなってしまうので不可。編集対象ページはすぐに更新、衝突したらそのときのレスポンスで利用者に知らせなければならない。
+対象となるページの更新、関連するページ更新のキュー入れ
+関連するページの更新(複数回)

RIGHT:[[:t/分割]]



%%ページを指定していないリクエストでは%%
+%%最後に参照したページ(クライアントにあるデータによる)%%
+%%デフォルトページ(Wikiの設定による)%%

%%…を返す。%%

#br

%%というわけで、トップページを見せたいときはトップページを指定したリンクを作り、通常はページを指定しないリンクを使う。%%
%%これで、静的なページからでもWebブラウザーの履歴を操作することなく、最後に参照したページに戻れる。%%
→URIとあわない。
**WikiNotationの優先順位 [#v31f1c67]
プラグインにはWikiNotationごとに(プラグインごとではなく)優先順位を定義。
これで複数のNotationに当てはまる場合や、Notationに包含関係がある場合に対応。

WikiEngine側で上書き可能。(Wikiの設定。Notation→プラグインの追加と一緒に定義)
Notationクラス名→優先順位の表を定義。これが無い場合はプラグイン側の定義を使用。

後からでも追加しやすいように優先順位は0以上の小数点数。
*設計 [#abe64751]
-ユースケースをクラス化。
RIGHT:[[:t/クラス]]
-ログインページの次はHTTP_REFERERにあるページ。
-ファイルはFlyweightであるべき。
-%%オブジェクトモデル上ではinclude.incのような機能を考慮しない。%%
%%include.incのような機能はデータコピーで実現。%%
-アクセスログはページの属性。
-%%利用者はページにある情報を元に作られる。%%
-%%ページが他のページインスタンス宛に編集クエリーを作る。%%
-%%検索はプラグイン化する。%%



**クラス間のつながり [#v3861373]
&ref(:Image/WikiEngine.gif);




**モデルはページ中心 [#k89eb2e9]
-ページ中心
-MVCのVとCは決まりきっている
Mはページとページに関連するクラス。プラグインにはあるかも知れないし無いかも知れない。
Cはフレームワークと各プラグインにある。
フレームワークが持つVのクラスは1つだけ。それ以外にはプラグインが独自に持つかも知れない。
-要点はプラグインの拡張性(可能性)
--トリガーの種類
~の前/後、他のプラグインと比べたときの優先度、…
--出力箇所の種類
--呼び出し箇所、クライアント側スクリプト部分、ヘッダー、フッター、…

RIGHT:[[:t/クラス]]