40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

[Titanium Mobile][javascript][あすなろBLOG Reader]043-MVCのControllerの役割を見直すその3

Controllerを見直すうちにどんどん深みにはまっている感じがします。(苦笑)

キャッシュファイルの読み取りを考える仕様を考えるうちに深みにはまってきた

テストコードを

test("load Entry cache",
  function(){
    var c = new Controller('hibi');
    c.init();
    // ダミーとなるエントリ一覧を5ページ分生成。
    // cache/hibi1.json,cache/hibi2・・となる
    var entries1 = c.receive(entry_list,1);
    var entries2 = c.receive(entry_list,2);
    var entries3 = c.receive(entry_list,3);
    var entries4 = c.receive(entry_list,4);
    var entries5 = c.receive(entry_list,5);
    var result = c.loadCache();
    //
    equals(result.length,5);
  }
);

としました。

ローカルにキャッシュする仕様として意図したのは

  • ファイル名は「ブロガー名+ページ数.json」としているため、何ページ目まで読み込んだのかはファイル名から判断する
  • 1つのファイルにつきエントリー情報5件格納。サーバから25件読み込み済だとすると、ローカルのキャッシュファイルは25÷5=5つになる。

ここまでは別によかったのですが、

「折角ローカルにキャッシュする仕様にするなら、アプリケーション起動時にローカルのキャッシュの有無を確認。キャッシュある場合には一度それを全部結合してから、Ti.UI.TableView.setData()に渡そう」

と考えた時

「キャッシュをすべて読み込む処理はいいけど、現在の仕様だとそれぞれのファイル毎に0から4までの数字を割り当てている」

//hibi1.json

{"0":{"permalink":"xxx","html_body":"xx"},
 "1":{"permalink":"xxx","html_body":"xx"},
 "2":{"permalink":"xxx","html_body":"xx"},
 "3":{"permalink":"xxx","html_body":"xx"},
 "4":{"permalink":"xxx","html_body":"xx"}
}
//hibi2.json
{"0":{"permalink":"xxx","html_body":"xx"},
 "1":{"permalink":"xxx","html_body":"xx"},
 "2":{"permalink":"xxx","html_body":"xx"},
 "3":{"permalink":"xxx","html_body":"xx"},
 "4":{"permalink":"xxx","html_body":"xx"}
}
//hibi3.json
// 略

でもローカルのキャッシュを全て読み込んだ場合、ファイルを結合することになりイメージとして

var local cache = {"0":{"permalink":"xxx","html_body":"xx"},
 "1":{"permalink":"xxx","html_body":"xx"},
 "2":{"permalink":"xxx","html_body":"xx"},
 "3":{"permalink":"xxx","html_body":"xx"},
 "4":{"permalink":"xxx","html_body":"xx"},
 "0":{"permalink":"xxx","html_body":"xx"},
 "1":{"permalink":"xxx","html_body":"xx"},
 "2":{"permalink":"xxx","html_body":"xx"},
 "3":{"permalink":"xxx","html_body":"xx"},
 "4":{"permalink":"xxx","html_body":"xx"}
// 略

となるが、ユニークなIDとなるものがないから各エントリを識別する方法が取れないのは何となくまずい感じがするように思い始めました

そしてどうしたか

サーバ側でJSON生成する部分から見直しをすることにして、こんな感じで投稿した日付をIDとして活用すればいいかなぁと考えました

var local cache = {
 "2006-08-10T14:09:00Z":{"permalink":"xxx","html_body":"xx"},
 "2006-08-11T10:09:00Z":{"permalink":"xxx","html_body":"xx"},
 "2006-08-15T14:20:00Z":{"permalink":"xxx","html_body":"xx"},
 "2006-08-20T12:00:00Z":{"permalink":"xxx","html_body":"xx"},
 "2006-08-21T13:26:00Z":{"permalink":"xxx","html_body":"xx"},
 "2006-08-23T09:00:00Z":{"permalink":"xxx","html_body":"xx"},
 "2006-08-24T22:07:00Z":{"permalink":"xxx","html_body":"xx"},
// 略

ただ、

「そういえば、ブログエントリ投稿した日付をMongoDB上で格納してなかった」

という今さらながら重要なことに気づいたのでそっちの手直しからとりかかるという状況でかなり自分自身で収集つかない状況になってきた・・・