Intern-Bookmark-2013のcpanfileを眺めると勉強になった
あまりにも秀逸なので一つ一つ読み解いていこうと思いました。
https://github.com/hatena/Hatena-Textbook/blob/master/mvc-web-application-with-plack.md
さてさてモジュールを使っているか見てみます。
requires 'Class::Accessor::Lite';
requires 'Class::Accessor::Lite::Lazy';
最近はClsss::Accessor::Lite or Mooみたいな感じでしょうか。ちなみに僕はMoo使い:)
requires 'Try::Tiny';
例外はTry::Tinyですね。
requires 'Log::Minimal';
ログ周りはLog::Minimalが流行ってますね。YAPC::Asia Tokyo 2013: 「本当にあったレガシーな話」と最近のlivedoorBlogの改修でも使われてるみたいですね。
requires 'DBIx::Sunny';
requires 'SQL::NamedPlaceholder';
requires 'Scope::Container::DBI';
requires 'SQL::Maker';
DBまわりは知らないモジュールばかりでした^^;;
sub _expand_args (@) {
my ($query, @args) = @_;
if (@args == 1 && ref $args[0] eq 'HASH') {
( $query, my $binds ) = SQL::NamedPlaceholder::bind_named($query, $args[0]);
@args = @$binds;
}
return ($query, @args);
}
...
sub select_one {
my $self = shift;
return $self->SUPER::select_one(Intern::Bookmark::DBI::_expand_args(@_));
}
DBIx::SunnyにSQL::NamedPlaceholderをかませてるのがおもしろいです。Scope::Container::DBI もSQL::Makerもかなりよさげです。DBIx::Skinnyばっかり使ってたので勉強になります。Teng派の人もいますよね。どこがスタンダードなのかなー。