委譲がいいんじゃないでしょうか #hachiojipm
-
Upload
tetsuji-ogata -
Category
Technology
-
view
2.270 -
download
2
description
Transcript of 委譲がいいんじゃないでしょうか #hachiojipm
委譲がいいんじゃないでしょうか
尾形 鉄次 (OGATA Tetsuji)
Twitter: @xtetsuji2013/9/28 Hachioji.pm#32
自己紹介
• 尾形 鉄次 (OGATA Tetsuji)
• Twitter: @xtetsuji
• Blog: http://post.tetsuji.jp/
• 北海道生まれでHokkaido.pmにも良く行く
テーマ:delegate / よしなに
今回は手短に
いつも長々と話してしまって反省しているので
自分自身の継承を想定したクラス以外は継承しない
• 結構当然なことですが、これを守らず安易に継承に頼るモジュールが多い
• 今回はPerlの話
題材• 絶滅危惧種 CGI.pm で (Perl5.20でbye!?)
• こういうコード、内外でよく見ますし私も昔書いたことあります…反省
• 同じようなものでも、Plack::RequestやApache2::RequestRecは、自分自身が継承されることを意図・言及しているはず
継承による例package My::CGI;
use strict;use warnings;
use parent 'CGI';
sub new { my $class = shift; ...; my $self = $class->SUPER::new(@_); return $self;}
sub foobar { my $self = shift; $self->{foobar} = $self->param('foobar'); # これはダメ ...;}
委譲による例package My::CGI;
use strict;use warnings;
sub new { my $class = shift; my $self = bless {}, $class; $self->{cgi} ||= CGI->new; # delegate return $self;}
sub foobar { my $self = shift; $self->{foobar} = $self->cgi->param('foobar'); # 良い ...;}
継承がマズイ理由• 親クラスの設計変更に引きずられる
• 例の様に「ハッシュリファレンスにblessされたもの」と仮定するとかダメ
• 将来的に内部キーが衝突したり、bless
されるデータ構造が変わるかも
委譲を助けるもの• 全てのメソッドをそのまま持ってこれるのは継承の便利なところ
• 委譲でやるなら AUTOLOAD とかか
• ただパフォーマンス的に問題もある
• 実直にメソッド作るのがよさそう
設計は難しいですね
• 雑なまとめ、LTっぽい
• 継承の使い過ぎは色々厳しい
• 多重継承をプラグイン構造の核としているモジュール、結構心折れる
うわ、ネタ無い…
• 普段はApacheをmod_perlでSMTPサーバにしたりmemcachedサーバにしたりしています!よろしく!
• 疎結合最高だー!私が普段作るものは小さい設計のものが多い
ご清聴ありがとうございました