2010-01-01から1ヶ月間の記事一覧

Factory Methodパターン

状況によって生成されるオブジェクトを変更したいケースで使う。 メリット オブジェクトの生成に必要な手続きを利用側から隠蔽できる サブクラスを返すことで利用側は型制約から解放される 実装例 Factory PenとKnifeをつくる package Factory; use Product:…

Singletonパターン

唯一のオブジェクトを生成をしたいケースで使う。 クラス package Singleton; use strict; my $instance; sub instance { my $class = shift; return $instance ||= bless {}, $class; } 1; 呼び出し use Singleton; my $instance1 = Singleton->instance();…

Template Methodパターン

スーパークラスで処理の枠組みを決め、実装の詳細をサブクラスに任せるパターン。呼び出し手順や共通処理をスーパークラスに実装する。ニュアンスとしては「だいたい同じだけど、細かいところでいくつか違う」ものを実装するのに使える。 例: 支払処理 packa…

デザインパターン

コードを読めば分かるが、適切に使いこなすことはできていない。 いい機会なので地道に実装をしてみる。 デザインパターンとは 借り物ではなく自分の言葉で書くと「プログラミングにおけるベストプラクティス」である。定石と言い換えることもできる。あくま…

Best Practice of Subroutine Design

大げさなタイトルだけれども、最近の思うところを。 引数に関して ウィッシュリストを返すルーチンwishを作ったとする。 package Foo; sub wish { my ($person, @wish_list) = @_; return "$person wants " . join(',', @wish_list) . ".\n"; } 1; これに対…

Advanced Testing!

Test::Moreのis(), ok()だけで終わらせていたらもったいない! ってことでいろいろ使ってみる。 Test::Moreをもう一歩踏み込んで使う is_deeply 構造レベルまでチェックしたい時に使う。 my $ref_hash; $ref_hash->{key} = 'val'; is_deeply($ref_hash, {key…

Cache::FileCacheのHowto

Cacheの実装として、ローカルのファイルシステムを使うもの。使ってみての所感をまとめたい。 導入により享受できる恩恵 当然ながら、DBへの負荷を減らせる ファイルなので複数プロセスで共有可能 ローカルにあるのでネットワークトラフィック発生しない 注…