ページを実装するには?

X/Page

ページの責務と実装案。

X/Pageはクラス設計。
やること

トリガー(前提条件)・事前条件 → 事後条件

ページでやること Edit


ページに記録された情報はページ/要素の入れ子になったものに変換される。実際に保存されるのはページ/要素だけ。それをどう特別扱いするかは使う側と要素自身の問題なので、ページ自体にはNotationText記法を使ったテキスト)←→ページ/要素の変換と記録、それぞれの参照くらいしか機能がない。
  • NotationTextのMIMEタイプは text/x-wikicreole, text/x-markdown, ... など。
  • ページ/要素のMIMEタイプは application/x-X-document とか application/prs.X.document といった感じにして。

主体はページ/要素が持つ情報(利用者が書いたこと)。それを組み合わせたり記録したりするものがページページを組み合わせるのがWiki。情報中心の設計。

やること一覧 Edit


いつ(トリガー)、何をするか。

要素に構造があったり、ページ間に上下関係があったりするものの、利用者からのリクエストパラメーターはそれを解釈できる要素だけが解釈する。リクエスト→要素→レスポンス。構造無視。要素は単独でWebアプリのように振る舞える。
やること

トリガー(前提条件)・事前条件 → 事後条件

→事前条件/事後条件は実装時に。

Xのモデル層にはページページ/要素くらいしかない。永続化するのはこれらのオブジェクトくらい。よそのアプリと連携するためのモデルクラスはできるかも知れないけど。ページページ/要素には共通点がある。どちらもデータコンテキストに対応。

ページの使われ方…用途は決めていない。何を書き込まれるか…要素次第なので定義不可。ページを操作するAPIは用意するけど用途は未定義。

:i/属性と内容:i/ページ内容と属性領域の違いは操作に必要な権限。他は同じで、実体はページ

利用者から見えるページページ/内容ページ/属性ページ/裏、ページ/権限。さらに内容はドキュメント/スレッド1/スレッド1-1/スレッド2/…と分かれている。いずれも実体は独立したページ

:i/権限が影響するもの[?]ページが関わるところ全てと、ユースケース。つまりいたるところ。権限の参照を速くすれば高速化できそう。

ページ永続化

NotationText(WikiText)は要素が分担して保存する。

記法テキスト以外でも書き換えられるようにするため。この方法でもテキストで書き換えられる。

:i/ページを保存するときはオブジェクトだけ

:i/ページタイトルにユースケース別接頭辞[?]を入れておくと、ブラウザーの履歴検索でも役立つ。

:i/ページの1行目は特別で、ページ/名前の元になる。ページタイトルになるのは最初の見出しページ/内容に全てを含める。コピペ1回でページ作成可能に。

→ :Done/ページ名とページタイトルの書き方[?]

→ :Done/ページ型/スレッド/データコンテキスト/記法定義をまとめて設計[?]

ページの上下関係 Edit


1つの上位ページで複数の下位ページをまとめることができる。ただページ/名前に共通部分を作るだけ。ページ間に関連なしの名前だけつながり。

上下関係はページ名に含まれる単語数。→ ページ/名前#i8d1b64a

順不同パスに共通点があれば下位展開でまとめて表示可能。

下位展開ビューでの順序情報に他のページ名が含まれるくらい。その情報は消えても間違っていてもいい。表示順序が変わるだけ。

:i/ページと他オブジェクトとの関わり合い

ルートページは全てのページの上位に位置するページ

ルートページは全てのページに共通する名前 / を持つ(だけの)ページということ。

ルートページの階層レベルは0。単語1つでレベル1。

ページ名でつながるネスト構造。オブジェクト間はつながっていない。

上位ページを閲覧すると下位ページも見える。上位と下位について→ 順不同パス

:Done/セクションをやめてページのネストで[?]

なんでもページに記録 Edit


ログの保存もページに。

ログの出力先を特定の(設定された)ページにする。

でもシステムが書き込むのはページ/裏のはず。ページ/裏の1つに追記していく。アクセスログ専用のページ/裏。

裏だけを使うページがあってもいいかも?

:i/アクセスログはページの属性

アクセスログもクラス名を冠したページ(のページ/裏)に?

:i/クラスごとにページを

:i/検索結果でページを作れば「検索結果の検索結果」が可能になる。

まず見せるところを「まず見て欲しいページというページ名見せることができる。更新される動的まとめ。

ページにさえできれば他のページに情報を渡せる。永続化されたページでなくてもいい。

ページを作るのに必要な情報を蓄積なしに揃えられる場合のみ?蓄積が必要なら呼出し回数に関わらず、何度でも同じ結果が生成できないと情報がおかしくなってしまう。

:i/テンプレートはページ名テンプレートを適用するときはそのページ名ページ/属性に書く。ページ/属性ページ/名前テンプレート内容。

独立したページにすると機能充実。その反面、テンプレートにも権限(錠)を設定できてしまう。運用の問題にしておく。

:i/添付ファイルもページ

ページ添付ファイルのアダプター。

:i/ページは要素でもあるページページ/要素は同一視可能…ではないものの、両方に共通した機能がある。例えばデータコンテキストに応じる機能。ページ/要素:i/ページにtoJsonを実装して、いずれでもJSON形式を作れるようにする。

その他 Edit


プロトタイピング[?]には以前行なったページの実装がある。

特定のページが必要になったとき Edit

特定のページが必要なくなったとき Edit

ページが更新されたとき Edit

更新を指示されたとき Edit

いつでも Edit

データアクセスに応じる Edit

データアクセス Edit

参照されたとき・データアクセスに応じるとき Edit