ディスパッチャの比較検討
ディスパッチャは、ウェブアプリケーションフレームワークの重要な一部品であるが、意外と語られることが少ないものだ。
package Your::Dispatcher;
use HTTPx::Dispatcher;
connect ':controller/:action/:id';
1;
高速。安定している。稼動実績がある。mobirc などのいくつかのオープンソースソフトウェアで採用実績がある。 同種のものの中では最もシンプルで、かつ最初に実装/リリースされた。
Python の Routes を三項にしている。
my $router = Path::Router->new;
$router->add_route('blog' => (
defaults => {
controller => 'blog',
action => 'index',
},
# you can provide a fixed "target"
# for a match as well, this can be
# anything you want it to be ...
target => My::App->get_controller('blog')->get_action('index')
));
汎用性があるもののなかではもっとも高機能だとおもう。一方で速度はそれほどでないかも(と、stevan がいってた)
Rails のルーターをインスパイヤしているらしい。
use Path::Dispatcher;
my $dispatcher = Path::Dispatcher->new;
$dispatcher->add_rule(
Path::Dispatcher::Rule::Regex->new(
regex => qr{^/(foo)/},
block => sub { warn $1; }, # foo
)
);
$dispatcher->add_rule(
Path::Dispatcher::Rule::Tokens->new(
tokens => ['ticket', 'delete', qr/^\d+$/],
delimiter => '/',
block => sub { delete_ticket($3) },
)
);
my $dispatch = $dispatcher->dispatch("/foo/bar");
die "404" unless $dispatch->has_matches;
$dispatch->run;
Path::Router とほぼ同じものに見える。なにが違うのかボクにはわからないんだ。
id:kazuhooku 謹製のディスパッチャ。たぶん pathtraq などで稼動実績がある(という噂)
sub foo_setup : Chained('/') PathPart('foo') CaptureArgs(1) {
my ( $self, $c, $foo_arg ) = @_;
...
}
Controller の側にアトリビュートで指定してやる。
Last modified: $Date: 2008-10-26T05:38:56.231052Z $