Não há briga, André. :) Eu só estou tentando mostrar onde vejo complexidade no Catalyst.
Creio que muita gente tem a mesma impressão. []s Op 13 jul. 2011 14:36 schreef "André Walker" <[email protected]> het volgende: > Eu acho que está havendo uma pequena confusão aqui. O Catalyst não foi > feito para rodar um Hello World. Foi feito para estimular boas práticas > de desenvolvimento de webapps, e ajudar o desenvolvedor a deixar seu > código com uma fácil manutenção. Por que você iria criar um modelo, uma > view, e um controller separados apenas pra rodar um Hello World? Se sua > aplicação é tão simples assim, talvez você não devesse usar Catalyst > mesmo (Eden, não me mate!!). > > http://www.shadowcat.co.uk/archive/conference-video/nwepm/catalyst-dbic/ > > Catalyst não tem screencasts populares de se fazer blogs em 10 minutos, > mas com ele você produz sistemas que você pode voltar meses, anos > depois, e vai conseguir manter com facilidade. > > Se simplicidade é menos linhas código, experimente estes exemplos: > > <?php echo "Hello world" ?> > > use CGI; > print "Content-type: text/html\n\nHello world"; > > Funcionam perfeitamente também. > > O código que você colou de sessões no Catalyst é bem diferente do > exemplo que você deu do Mojolicious. Faz coisas diferentes, e contém um > monte de comentários, por isso é maior. Só porque o código de exemplo é > mais amplo não significa que o resultado final é mais complexo. > > Na minha opinião, tudo se resume a usar a ferramenta correta para o > projeto, cada uma tem prós e contras. E o resto é apenas preferência. > TIMTOWTDI. Não sei por que tanta briga. > > Abraços! > André > > On 07/13/2011 06:48 AM, Nelson Ferraz wrote: >> Simplicidade é algo difícil de definir, mas todo mundo consegue >> identificar. >> >> Vamos começar com um exemplo que eu considero simples: >> >> >> use Mojolicious::Lite; >> >> get '/' => sub { >> my $self = shift; >> my $name = $self->param('name') || 'world'; >> $self->render( text => "Hello, $name" ); >> }; >> >> app->start(); >> >> >> >> Esta é uma aplicação mínima, porém completa. Você pode executá-la e >> testá-la em http://localhost:3000. >> >> Agora, vamos dizer que eu queira usa um template: >> >> >> use Mojolicious::Lite; >> >> get '/' => sub { >> my $self = shift; >> my $name = $self->param('name') || 'world'; >> *$self->stash( name => $name )*; >> } *=> 'index';* >> >> app->start(); >> >> * __DATA__ >> @@ index.html.ep >> <h1>Hello, <%= $name %>!</h1>* >> >> >> >> (Sob o ponto de vista didático é conveniene mostrar o template junto >> com o código, para que as pessoas possam copiar e colar; na prática eu >> criaria um arquivo dentro de um diretório chamado "templates", que >> seria reconhecido automaticamente.) >> >> E se eu quiser usar um arquivo de configuração? Basta criar um arquivo >> chamado "app.conf". (Onde "app" é igual ao nome da aplicação). Exemplo: >> >> >> { >> default_name => 'world' >> } >> >> >> >> Para usar o arquivo de configuração: >> >> >> >> use Mojolicious::Lite; >> >> * plugin 'config'; >> * >> get '/' => sub { >> my $self = shift; >> my $name = $self->param('name') || >> *$self->config('default_name')*; >> $self->stash( name => $name ); >> } => 'index'; >> >> app->start(); >> >> __DATA__ >> @@ index.html.ep >> <h1>Hello, <%= $name %>!</h1> >> >> >> >> Se você quiser acessar a variável de configuração a partir do template: >> >> >> use Mojolicious::Lite; >> >> plugin 'config'; >> >> get '/' => sub { >> my $self = shift; >> my $name = $self->param('name'); >> $self->stash( name => $name ); >> } => 'index'; >> >> app->start(); >> >> __DATA__ >> @@ index.html.ep >> <h1>Hello, <%= $name *|| config('default_name')* %>!</h1> >> >> >> >> Vamos, agora, guardar o nome em uma variável de sessão: >> >> >> use Mojolicious::Lite; >> >> plugin 'config'; >> get '/' => sub { >> my $self = shift; >> >> my $name = $self->param('name') >> * || $self->session('name')* >> || $self->config('default_name'); >> >> * $self->session( name => $name );* >> >> $self->stash( name => $name ); >> } => 'index'; >> app->start(); >> __DATA__ >> @@ index.html.ep >> <h1>Hello, <%= $name %>!</h1> >> >> >> >> Aí está: um exemplo completo, com template, arquivo de configuração >> externo, e sessão. >> >> Compare com a página de documentação do Catalyst::Plugin::Session: >> >> # To get sessions to "just work", all you need to do is use these plugins: >> >> use Catalystqw/ >> Session >> Session::Store::FastMmap >> Session::State::Cookie >> /; >> >> # you can replace Store::FastMmap with Store::File - both have sensible >> # default configurations (see their docs for details) >> >> # more complicated backends are available for other scenarios (DBI storage, >> # etc) >> >> >> # after you've loaded the plugins you can save session data >> # For example, if you are writing a shopping cart, it could be implemented >> # like this: >> >> sub add_item: Local{ >> my ( $self, $c ) = @_; >> >> my $item_id = $c->req->param("item"); >> >> # $c->session is a hash ref, a bit like $c->stash >> # the difference is that it' preserved across requests >> >> push @{ $c->session->{items} }, $item_id; >> >> $c->forward("MyView"); >> } >> >> sub display_items: Local{ >> my ( $self, $c ) = @_; >> >> # values in $c->session are restored >> $c->stash->{items_to_display} = >> [ map { MyModel->retrieve($_) } @{ $c->session->{items} } ]; >> >> $c->forward("MyView"); >> } >> >> Este é o "problema de complexidade". >> >> Se o Catalyst::Lite puder reunir a simplicidade do Mojolicious com a >> solidez do Catalyst, creio que este será o melhor dos dois mundos. >> >> []s >> >> Nelson >> >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
