• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:[[:t/ページ]] [[:t/実装]]

[[ページ]]を実装するには?
→ [[X/Page>X#g329967c]]
[[ページ]]の責務と実装案。
[[X/Page>X#g329967c]]はクラス設計。

:やること|
トリガー(前提条件)・事前条件 → 事後条件

----

#contents

**ページでやること [#ebcadb57]
ページに記録された情報はページ/要素の入れ子になったものに変換される。実際に保存されるのはページ/要素だけ。それをどう特別扱いするかは使う側と要素自身の問題なので、ページ自体にはNotationText(記法を使ったテキスト)←→ページ/要素の変換と記録、それぞれの参照くらいしか機能がない。

- NotationTextのMIMEタイプは text/x-wikicreole, text/x-markdown, ... など。
- ページ/要素のMIMEタイプは application/x-X-document とか application/prs.X.document といった感じにして。

主体はページ/要素が持つ情報(利用者が書いたこと)。それを組み合わせたり記録したりするものがページ。ページを組み合わせるのがWiki。情報中心の設計。
:やること|
トリガー(前提条件)・事前条件 → 事後条件

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

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

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

[[:i/属性と内容]]、[[:i/ページ内容と属性領域の違い]]は操作に必要な権限。他は同じで、実体はページ。
利用者から見えるページはページ/内容、ページ/属性、ページ/裏、ページ/権限。さらに内容はドキュメント/スレッド1/スレッド1-1/スレッド2/…と分かれている。いずれも実体は独立したページ。

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

ページの永続化。
NotationText(WikiText)は要素が分担して保存する。
記法テキスト以外でも書き換えられるようにするため。この方法でもテキストで書き換えられる。
[[:i/ページを保存するときはオブジェクトだけ]]

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

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

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

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

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

順不同パスに共通点があれば下位展開でまとめて表示可能。
下位展開ビューでの順序情報に他のページ名が含まれるくらい。その情報は消えても間違っていてもいい。表示順序が変わるだけ。
† [[:i/ページと他オブジェクトとの関わり合い]]

ルートページは全てのページの上位に位置するページ。
ルートページは全てのページに共通する名前 ''/'' を持つ(だけの)ページということ。
ルートページの階層レベルは0。単語1つでレベル1。

ページ名でつながるネスト構造。オブジェクト間はつながっていない。
上位ページを閲覧すると下位ページも見える。上位と下位について→ [[順不同パス]]
[[:Done/セクションをやめてページのネストで]]

***なんでもページに記録 [#v091f421]
ログの保存もページに。
ログの出力先を特定の(設定された)ページにする。
でもシステムが書き込むのはページ/裏のはず。ページ/裏の1つに追記していく。アクセスログ専用のページ/裏。
%%裏だけを使うページがあってもいいかも?%%
[[:i/アクセスログはページの属性]]

アクセスログもクラス名を冠したページ(のページ/裏)に?
[[:i/クラスごとにページを]]

[[:i/検索結果でページを作れば「検索結果の検索結果」が可能に]]なる。
%%まず見せるところを「まず見て欲しいページ」''というページ名で''見せることができる。更新される動的まとめ。%%
ページにさえできれば他のページに情報を渡せる。永続化されたページでなくてもいい。
ページを作るのに必要な情報を蓄積なしに揃えられる場合のみ?蓄積が必要なら呼出し回数に関わらず、何度でも同じ結果が生成できないと情報がおかしくなってしまう。

[[:i/テンプレートはページ名]]。テンプレートを適用するときはそのページ名をページ/属性に書く。ページ/属性→ページ/名前→テンプレート内容。
独立したページにすると機能充実。その反面、テンプレートにも権限(錠)を設定できてしまう。運用の問題にしておく。

[[:i/添付ファイルもページ]]
ページは添付ファイルのアダプター。

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

***その他 [#adb264af]

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



***特定のページが必要になったとき [#p95d2ccd]
- 復帰
永続化してあったインスタンスから
- 生成(コンストラクター)
指定されたNotationTextをページ/要素に変換して、自身のドキュメントとする。
ファイルアップロード時でもファイルを表すページのテンプレートはある。それをページ/要素に変換。
ページ/名前とページタイトルはNotationTextから決定。

***特定のページが必要なくなったとき [#l8393b3c]
- 永続化

***ページが更新されたとき [#z604cc75]
- 版の生成
指定されたページの新しい版を生成。
指定されたページのページ/履歴が1件増える。

***いつでも [#l83fc117]
- ページ/属性公開
- ページ/属性変更
※権限判定はユースケースで。
- ページ/属性・公開と変更
-- 属性/継承を行なう。
-- ページ/型
- ページ/裏・公開と変更
(公開は使う予定なし )
- ページ/権限・公開と変更
-- 権限/継承を行なう。
-- 権限/錠

※権限照合はユースケースで。
※継承処理は使う側で。

***データアクセスに応じる [#w4a06625]
- セレクターの要素探索に付き合う
- ''セレクターの要素探索に付き合う''
- 要素呼び出し
- 要素が勝手に振る舞う
- 要素が返した結果を自分の成果であるかのように返す
- データコンテキストに合う形式で返す

***データアクセス [#b2c849b7]
- データコンテキストに合わせて変換・出力
-- データコンテキストの型はHTMLやJSONなど。
-- ページ/型が「ページ/要素」の場合に有効。それ以外の場合は変換しようがない。
-- ページ/型はMIMEタイプ。変換後もMIMEタイプで表せる形式。データコンテキストの型は変換後の型なのでこれもMIMEタイプ。データコンテキストの型はX独自のキャメルケース形式でも可。Markdown/Creole/WikiCreole/... 大文字小文字の区別なしで。
-- 自身が含んでいるページ/要素も同じデータコンテキスト指定で呼び出す
-- 副作用は要素によってあるかも知れない
-- 変換結果を返す