Program

悪いプログラムを書かないようにするには?

「良いプログラムとは?」と聞かれると結構千差万別ですが、悪いプログラムはえてして共通してます。

で、その悪いプログラムを書かないようにするには、「適切な名前を付ける」ことが簡単でおススメです。

深く考えていくと難しいのですが、コード上ですぐできるという意味では非常にお手軽で効果も高い。

お買い得なのです。

 

悪い例

WS000166

checkとはいったいなんなのか?

checkとは値を変えることも含む言葉なのか?

そもそも$dataとは何を投げればいいのか?

困りものです。

 

「この関数・クラスはそもそも何をやっているのか?」を明示しましょう。

 

改善1

WS000169

and多すぎ。

名前を明示すると「ちょっとこの関数でやりすぎじゃないか?」と感じますね。

現状を隠さずはっきりと見つめることで問題が浮かび上がってきます。掃除やダイエットと同じです。

 

さらに改善

WS000170

 

何が必要なのかわかってきましたね。実はclient_id以外はいらなかったのです。

さらに名前もコードも呼び出すときに必要あれば追加すれば良かったのです。チェックする人が勝手に直したら隠蔽です。

 

めでたしめでたし。

これで後からプロジェクトに参加する人も楽しく働けましたとさ。

Cakephp 2.x でページネートの結果をキャッシュ

Webアプリケーションのパフォーマンス改善の筆頭といえばキャッシュです。

データベースへなどへのアクセスが必要なデータをメモリやファイルに持っておけば負荷も減りますし、頼もしい限り。

 

Cakephp (2.x)では、基本的に

キャッシュにデータ書き込み
$result = array(‘result’ => 100);
Cache::write(‘result’, $result, ‘paginate_cache’);

 

キャッシュデータ呼び出し
$result = Cache::read(‘result’, ‘paginate_cache’);

//result = array(‘result’ => 100)

 

で大丈夫なんですが、ページネータの場合はさらに2つの操作が必要になります。

リクエストオブジェクトのparamsパラメータの’paging’キーのキャッシュと、コントローラ内でのPaginatorHelperの使用宣言です。

 

pagingキーに入っている値っていうのはカウント数とか、ページ数を持っている配列ですね。

↓こういう値が入ってます。

WS000076

んで、キャッシュするときにこの値もちゃんとCache::writeでとっておかないと、「結果0件なのに表示されてる。。。けど1ページ目しかない」みたいな表示にバグります。

なので、

$paging = $this->request->params[‘paging’];

Cache::write(‘paging’, $paging, ‘paginate_cache’);

 

$paging = Cache::read(‘paging’, ‘paginate_cache’);

$this->request->params[‘paging’] = $paging;

 

のように、キャッシュを呼び出す時にもう一回設定しなおさないとダメなんですね。

2つめの「PaginatorHelperの使用宣言」ってのはこういうのです。

WS000074

これを設定しておかないと、クエリパラメータとかちゃんととってくれません。 Cakephpのコードを見てみると、確かにPaginatorComponentのpaginateメソッドの最後で設定してます。

WS000077

キャッシュを使うときはこのpaginateメソッドを通らないので、自分で設定しておく必要があるってことですね。 これで Order by とかが重くなりがちなpaginateも余裕のクリアです。

でも売り切れ状態とかリアルタイムでほしいステータスもキャッシュしてしまうので気をつけてください。