1行日記をつくってみる。3.0
週末ちょっとコードを触っていたので、早速バージョンアップしてみました。
https://github.com/matildatilda/onelinediary
gitコマンドにも少し慣れて来たかな。コミットの前のステージと言う考え方を把握するとすっきり理解できますね。
変更点は以下のとおり。
です。
このphp関連がMVCでいう、モデルに相当します。…することにしてます。(ちょっと理解が怪しい)
データの取得については、テーブルの列をそのまま渡しているだけで特に加工はしていません。ただ取得方法が以下のように、
- 年、月をパラメータとして受け取り、複数行返す(onelinediary.htmlで表示)
- IDをパラメータとして受け取り、単一行を返す(writeDiary.htmlで表示)
の2パターンをselectDiaries.php一つで処理しています。MVVMパターンだとビューが違うので分けるべきですが、MVCパターンだとデータモデル(テーブル)を規準として考えるべきなので、こういう形になりました。
それと処理をクラス化しないでphpファイルを複数に分けたままにしたのは、処理ごとに呼び出す必要があったから…なんですが本当はデータモデルのクラス(例:Diaries)を作るべきだと思います。SQLの処理とか隠蔽しておきたいし。
コントロールについては、jQueryで実装しています。モデルへのリクエスト、受け取ったJSONデータをhtml形式に展開などですね。
ちょっと難しかったのが、jQueryでのhtml要素の生成をメソッドチェーンで実装した部分。
$("#diaryTable") .append($("<tr></tr>") .append($("<th></th>").html("日")) .append($("<th></th>").html("日記")) .append($("<th></th>").html("変更")) );
Tableに表題行(日、日記、変更)を追加しています。
2行目の.append内でtr要素を作成、その作成したtr要素に対して、3行目以降さらにtd要素を作成して.appendしています。
している、という理解なのですが、本当にそういう処理になっているのかちょっと自身無くなってきました。一応それっぽく表示されているけど…。
メソッドチェーンじたいは他の言語にもあるので、そんなに難しくないですが.appendがちゃんと意図した要素のオブジェクトを返してるのか分からないんですよね。暗黙的な宣言の言語だとこういう時にちょっと迷います。
最後に、ビューはシンプルなcss&htmlで作りました。上記のjQueryでの動的なテーブル行作成はコントロールに相当するように思うんですが、これはビューかな。
モデルへのリクエスト部分だけがコントロール、ですね。たぶん。
次回はタグを実装してみる予定です。
今日はこの辺で。