Send to your Kindle *最低限必要なもの [#w0fbb4e3] -コア部分 -周辺部分 **コア部分 [#zae1fb02] &ref(http://img.f.hatena.ne.jp/images/fotolife/p/pmint/20091103/20091103015312.png); -データ変換 --記法を含むテキストをオブジェクト化する --個々のオブジェクトから(HTMLなどの)別形式を得る -各記法クラスによる同型オブジェクト間の同一性の評価 検索で使用。類似度を算出。 -検索 -オブジェクトの永続化 -プラグインの使用 -構造化ページ -代表とその決定方法 -エラーレベル --利用者向け情報 Info 不正なリクエストなど。ページのメッセージ欄に出力。 [[WikiEngine/Error/Info]] --警告 Warning デバッグ用ログ出力と管理者ロール宛てメールに出力。 処理続行。 [[WikiEngine/Error/Warning]] --致命的エラー Fatal 処理中断。 開発時のアサーション違反はエラー、運用中は警告だけ。 [[WikiEngine/Error/Fatal]] -排他制御 --更新コマンドのキューイング キューと要素のフォーマットは… キュー→ファイル(名前順) 要素→永続化されたCommandオブジェクト ファイルロックは…PageFactoryが永続化されたオブジェクトを復帰/保存するときと、オブジェクトが自身の関連ファイル(他のオブジェクトの所有物でないファイル)を操作するときくらい。 [Prog]参照 ***データ変換(記法クラス) [#j528038f] テキスト→オブジェクト→HTML オブジェクト→永続オブジェクト どれも記法クラスの役目。 -記法/表 |…|…| -記法/強調 ''…'' ***周辺部分 [#c715cd8b] 特にWebアプリケーションとしてのWikiに必要なこと。 -Webアプリケーションとしてのコントロールクラス -UI -アカウント -スキン ***UI [#s041046b] スキンに含まれるテンプレートと関連が深い。 最低限必要なUIだけ。 ***スキン [#ca6fb64a] -テンプレート -スタイルシート -貼るもの 画像とか。 ページの一種。それがテンプレートになる。 スタイルシートや画像は普通に作ればいい。 **クラス [#k41904d8] #lsx(tag=クラス) **アカウント [#s0de27cc] -ログイン、ログアウト [[Google:はてな認証API]]で。 -アカウントとロールと権限設定 →[[利用者]] &ref(http://img.f.hatena.ne.jp/images/fotolife/p/pmint/20091108/20091108040844_original.png); ------------------------------------------------------------ 必要なときに必要としているクラスから呼び出される。 主にユースケースを表すコントロールクラスから。 ***ページの構成 [#h4d33ed8] Wiki(サイト)─Entry(項目)─Side(見解)─Revision(版) :Wiki|WikiEngineのインスタンス :Entry|項目、ページ、Wikipediaでの1ページ :Side|→ [[見解]] :Revision|バックアップ、Wikipediaでの版 RIGHT:[[:t/プロトタイピング]] 実装のためのまとめ。 ---- #contents **全体のクラス図 [#g6d27cbf] [[https://www.dropbox.com/sh/6d15699bc8vded3/AADhSZL6RV4ySd_lHbLSFAM2a/wiki?preview=%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3.png]] %%[[astah* file>http://dl.dropbox.com/u/62172621/wiki/wiki.asta]]%% %%&ref(http://dl.dropbox.com/u/62172621/wiki/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3.png,100%);%% *特に関連の強いページ [#a1b1cc24] -[[モデリング]] -[[フレームワーク]] -[[クラス>http://wiki.pmint.name/index.php?cmd=lsx&tag=%E3%82%AF%E3%83%A9%E3%82%B9]] -[[コンセプト]] ** [#d71d5ec7] とりあえずPerlで。 UI抜きで。 フレームワークの実現と主要機能の実現を。 もし記法やプラグインをまったく使えないWikiEngineを作ったら… テキストを記録するだけ。 ファイル名とテキストを与えると記録、ファイル名のみならテキストを出力。 これにプラグイン独自のデータと処理を加えて、プラグインごとに違うHTML出力ができるようにする。 中心はプラグインを作るためのAPI。 *図 [#k966a347] [[Webアプリケーションのフレームワーク>http://f.hatena.ne.jp/pmint/20090927012512]] フレームワーク/Webアプリケーションのみ。フレームワーク/WikiEngineはControlクラスから別途呼び出し。なのでフレームワーク/WikiEngineはこの図のModelにあたる。 #ref(http://img.f.hatena.ne.jp/images/fotolife/p/pmint/20090927/20090927012512.png) →[[フレームワーク/Webアプリケーション]] -ユーザー システム外。 -メイン 非オブジェクト指向の手続き指向。 --ユースケース [[フレームワーク/WikiEngine]]のクラス。 編集とか、ページ作成とか、ページ閲覧とか。そういったものの処理フロー。他のクラスに依存しっぱなし。 -クエリー(ユーザーから与えられたデータ) グローバルなデータ。なのでシングルトン。 モデルによって書き換えられた後、ビューに参照される。 -モデル系 クエリーから入力(内部形式・独自形式、扱い方はモデル系クラス自身が知っている)、処理、保存(永続化)、''クエリーに''出力 -ビュー系 クエリーから入力(文字列)、それをHTMLなどのテンプレートに埋め込む。 ---- HTMLを要求するのはフレームワーク/Webアプリケーションのほう。 WebアプリケーションはWikiEngineを3度呼ぶ。 +エントリーポイント +フレームワーク/Webアプリケーション WikiEngineオブジェクトを生成。 +フレームワーク/WikiEngine WikiEngineオブジェクトを作る(だけ)。 +フレームワーク/Webアプリケーション WikiEngineオブジェクトにリクエストを伝える(そのまま渡すのではなく、WikiEngineが理解できる形で) +フレームワーク/WikiEngine 自身の状態を変化させる。状態は永続化する。 +フレームワーク/Webアプリケーション WikiEngineにHTMLを要求。 +フレームワーク/WikiEngine HTMLを生成。 +フレームワーク/Webアプリケーション HTMLにヘッダーを付けてWebページ化。 ------------------------------------------------------------ Wikiエンジンのフレームワーク →[[フレームワーク/WikiEngine]] Webアプリ部分で言うモデル系のこと。 スキンはビュー系。 直接関連はしない。コントロールクラス経由で呼び出し。 +ユースケース(コントロールクラス)→モデル +ユースケース(コントロールクラス)→ビュー でも、ビューがモデルを呼ぶこともあるかも。 決まりきっている部分。HTMLヘッダーとか、背景とか。多くのページが必要とする部分とか。ユースケース別にすることもない部分。 ---------------------------------------- クライアント側で動くものはUI周辺のみ。 *最低限必要なもの [#w0fbb4e3] -コア部分 -周辺部分 **コア部分 [#zae1fb02] &ref(http://img.f.hatena.ne.jp/images/fotolife/p/pmint/20091103/20091103015312.png); -データ変換 --記法を含むテキストをオブジェクト化する --個々のオブジェクトから(HTMLなどの)別形式を得る -各記法クラスによる同型オブジェクト間の同一性の評価 検索で使用。類似度を算出。 -検索 -オブジェクトの永続化 -プラグインの使用 -構造化ページ -代表とその決定方法 -エラーレベル --利用者向け情報 Info 不正なリクエストなど。ページのメッセージ欄に出力。 [[WikiEngine/Error/Info]] --警告 Warning デバッグ用ログ出力と管理者ロール宛てメールに出力。 処理続行。 [[WikiEngine/Error/Warning]] --致命的エラー Fatal 処理中断。 開発時のアサーション違反はエラー、運用中は警告だけ。 [[WikiEngine/Error/Fatal]] -排他制御 --更新コマンドのキューイング キューと要素のフォーマットは… キュー→ファイル(名前順) 要素→永続化されたCommandオブジェクト ファイルロックは…PageFactoryが永続化されたオブジェクトを復帰/保存するときと、オブジェクトが自身の関連ファイル(他のオブジェクトの所有物でないファイル)を操作するときくらい。 [Prog]参照 ***データ変換(記法クラス) [#j528038f] テキスト→オブジェクト→HTML オブジェクト→永続オブジェクト どれも記法クラスの役目。 -記法/表 |…|…| -記法/強調 ''…'' ***周辺部分 [#c715cd8b] 特にWebアプリケーションとしてのWikiに必要なこと。 -Webアプリケーションとしてのコントロールクラス -UI -アカウント -スキン ***UI [#s041046b] スキンに含まれるテンプレートと関連が深い。 最低限必要なUIだけ。 ***スキン [#ca6fb64a] -テンプレート -スタイルシート -貼るもの 画像とか。 ページの一種。それがテンプレートになる。 スタイルシートや画像は普通に作ればいい。 **クラス [#k41904d8] #lsx(tag=クラス) **アカウント [#s0de27cc] -ログイン、ログアウト [[Google:はてな認証API]]で。 -アカウントとロールと権限設定 →[[利用者]] &ref(http://img.f.hatena.ne.jp/images/fotolife/p/pmint/20091108/20091108040844_original.png); ------------------------------------------------------------ 必要なときに必要としているクラスから呼び出される。 主にユースケースを表すコントロールクラスから。 ***ページの構成 [#h4d33ed8] Wiki(サイト)─Entry(項目)─Side(見解)─Revision(版) :Wiki|WikiEngineのインスタンス :Entry|項目、ページ、Wikipediaでの1ページ :Side|→ [[見解]] :Revision|バックアップ、Wikipediaでの版 *コード [#u12dfe3d] 今使ってるPerlのほか、PHP、Microsoftの、Rubyも。 [[codeなにがし>http://code.nanigac.com/]]に投稿してみる。 -フレームワーク/Webアプリケーション [[code*:357]] -フレームワーク/WikiEngine [[code*:362]] -ページ、|…|…|、''…'' [[code*:364]] [[code*:375]] -検索/クエリー [[code*:375]] [[:i/検索/流れ]] -利用者 クラス定義とOpenID認証のサンプルだけで良い。 ''[[code*:???]]'' [[code*:412]] ---------- テスト用のUIを付けて… コードは[[http://wiki.pmint.name/index.php>http://wiki.pmint.name/index.php]]のどこかに置いて。 -見解 -代表 -利用者 -ページ/章 **01/ [#n3895eae] #ls **[[tag:01]] [#lcacfa55] #lsx(tag=01,new=true)