Debuginfo

思考とアウトプット

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::DBISQL::Makerもかなりよさげです。DBIx::Skinnyばっかり使ってたので勉強になります。Teng派の人もいますよね。どこがスタンダードなのかなー。