[SP-pm] Opiniões sobre Catalyst Web Framework

Hernan Lopes hernanlopes at gmail.com
Fri Jan 7 11:43:19 PST 2011


Catalyst é sem dúvidas o melhor framework web do momento. E vai continuar
sendo por muito tempo.
Vá em frente, você não vai se arrepender, ninguem se arrepende.
Leia o manual do catalyst no cpan, lá tem tudo que você irá precisar
inicialmente. A documentação é bastante farta e completa.
Recomendo HTML::FormHandler para trabalhar formulários web.
É bom se familiarizar também com DBIx::Class, conforme suas dúvidas forem
aparecendo.... aqui estão todas as respostas para as questões de acesso a
banco de dados... leia aqui antes de perguntar, garanto que a resposta está
em alguma página do DBIx::Class.

Um exemplo de acesso à tabela produtos com DBIx::Class:

my $products = $c->model('DB::Product')
  ->search({
    categoria => 'computadores',                              #traz tudo que
é categoria computadores
    preco => { '>=', 500 },                                        # traz
tudo com preço >= 500
    },{
      rows=> 5,
#opcional, a busca vai trazer limitar a 5 linhas
      page=> 1,
#opcional,  vai trazer apenas esta página
      order_by => { -asc => [qw/created/] },               #opcional, vai
ordenar por data de criação
      });

ai vc pode fazer um loop nos produtos ex:

 while (my $p = $products->next) {
    $c->log->debug('nome do produto', $p->nome );
    $c->log->debug('nome do produto', $p->categoria );
    $c->log->debug('nome do produto', $p->preco );
    }

Se você percebeu, esses códigos seriam executados nos controllers... como
seria isso em uma view ? o catalyst utiliza o Template::Toolkit, que tem um
excelente manual tb: ex
http://template-toolkit.org/docs/manual/VMethods.html#method_match

então seguindo o exemplo acima, vamos supor que eu selecionei os
$products... então o próximo passo seria jogar esses $products no "stash" do
catalyst..
O "stash" é um espaço/hash reservado onde você pode armazenar dados que
serão acessados em outros métodos/view/partes do código.
Então para setar os $products no stash faremos o seguinte:

$c->stash(
products => $products,
template => 'template-legal.tt2',
current_view => 'TemplatePadrao',
);

pronto, eu poderia ir para outro método e acessar o $c->stash->{products} ,
ou, posso ir para minha View e acessá-lo, conforme o exemplo:

(no template-legal.tt2):

<div>
....
[% WHILE (product = products.next) %]
Nome: [% product.nome %]
Preço: [% product.preco %]
Categoria: [% product.categoria %]
[% END %]
....
</div>



Ok, agora só falta um exemplo de formulário com HTML::FormHandler:

        my $form = HTML::FormHandler->new(
            field_list =>   [

            nome => {
              type => 'Text',
              label => 'Nome',
              required => 1,
              required_message => 'Campo obrigatório' ,
            },

            sexo => {
              type => 'Select',
              label => 'Sexo',
              required => 1,
              required_message => 'Campo obrigatório' ,
              options => [
              { label => 'SIM', value => 'SIM'},
              { label => 'NÃO', value => 'NÃO'},
              ],
            },

            submit => {
              type => 'Submit',
              value => 'Salvar',
            },

            ]);





         if ($c->req->method eq 'POST') {                    #Assim podemos
verificar o methodo do request
           $form->process( params => $c->req->params );              # E
acessar as chaves/valores do formulario postado
         }

         $c->stash( form => $form );                          # Jogamos o
form no stash para acessar na view


         return unless $form->validated;                      # Tentamos
validar o formulario

         $c->response->redirect($c->uri_for('/'));               # e assim
redirecionamos para a url /


Certo, depois para renderizar isto na view é muito simples... apenas:

<div>
...
[% form.render %]
...
</div>




Espero ter ajudado a visualizar um pouco como as coisas básicas funcionam.

Fora isso o resto é auto explicativo, catalyst é bastante direto e sem
complicações.
e conforme já foi dito, é possível criar aplicações simples e complexas.

dá gosto trabalhar com catalyst!!!o melhor framework web, sem dúvidas!

att

Hernan



2011/1/7 Blabos de Blebe <blabos at gmail.com>

> Eu tenho usado bastante o Mojolicious::Lite para prototipação.
>
> Experimentei brevemente o Dancer e gostei da documentação.
>
> Mojo e Dancer tem uma curva de aprendizagem bem suave. Você passa o
> olho na doc e sai fazendo.
>
> Já o Catalyst, por ser mais parrudo é mais chatinho no começo, depois
> melhora.
>
> ...
>
> Divagando...
>
> Não que seja o caso, nem é o foco da thread e talvez até contextualize
> o tom da brincadeira, mas se eu vejo uma frase começando com 'não me
> importo em *ter que* X', ou 'não tenho *problema* em Y', acende aquele
> sinal de alerta.
>
> *Se* passa pela cabeça a expressão 'ter que programar em Perl' um
> conselho que eu dou: *Não faça isso*.
>
> Perl será uma linguagem iadequada, feia, cheia de caracteres
> estranhos, write-only, não importa qual framework utilizado.
>
> End of divagation
>
> Abraços
>
> 2011/1/7 Rogerio Ferreira <rogeriotux at gmail.com>:
> > ,
> >
> > Eu não tenho problema em escrever em Perl, Python, ou outra coisa
> qualquer.
> > Só quero escolher um framework pra acelerar as coisas pro Projeto que vou
> > iniciar.
> >
> > Mas já valeu pelo cases que o Breno passou que usam Catalyst.
> >
> > Em 7 de janeiro de 2011 15:13, Blabos de Blebe <blabos at gmail.com>
> escreveu:
> >>
> >> Escrever Perl é como sexo.
> >>
> >> Pode ser prazeroso ou dolorozo dependendo de como você fizer.
> >>
> >> Por isso é uma diversão melhor indicada para adultos que sabem o que
> >> estão fazendo :)
> >>
> >> Abraços
> >>
> >> 2011/1/7 Rogerio Ferreira <rogeriotux at gmail.com>:
> >> > Valeu Breno!
> >> >
> >> > Como ainda não tomei a decisão sobre qual Framework vou usar, a sua
> >> > explanação vai dar alguma orientação. Mas vou fazer mais alguns testes
> >> > com o
> >> > Catalyst, e como não sou religioso de linguagem alguma, a pesar de já
> >> > ter
> >> > sido com Python, quando desenvolvia com Zope/Plone, não me importo em
> >> > ter
> >> > que escrever código em Perl.
> >> >
> >> > Obrigado pelas informações.
> >> >
> >> > Em 7 de janeiro de 2011 12:56, breno <breno at rio.pm.org> escreveu:
> >> >>
> >> >> 2011/1/7 Rogerio Ferreira <rogeriotux at gmail.com>:
> >> >> > Oi Pessoal,
> >> >> >
> >> >>
> >> >> Oi Rogério, bem-vindo!
> >> >>
> >> >> > Estou postando essa mensagem na lista, pois acredito que não lugar
> >> >> > melhor
> >> >> > para chegar a uma conclusão. Já conheço alguns Frameworks, CMSs,
> >> >> > etc...,
> >> >> > e
> >> >> > algumas linguagens de scripting. Eu tenho um projeto para iniciar e
> >> >> > andei
> >> >> > pesquisando sobre o Catalyst, apesar de conhecer Rails, e como não
> >> >> > gosto
> >> >> > muito de Django, a pesar de gostar de python, eu tenho pretensão de
> >> >> > usar
> >> >> > o
> >> >> > Catalyst neste projeto. Por isso gostaria de saber de vocês, já que
> >> >> > aqui
> >> >> > é a
> >> >> > vossa praia, sobre suas experiências com o Framework, tais como:
> >> >> > Agilidade
> >> >> > para Produzir Resultados, Performance, Manutenção de
> >> >> > Código Produzido e
> >> >> > projetos que já usam Catalyst em ambiente de grande demanda de
> >> >> > acessos
> >> >> > simultaneos.
> >> >> >
> >> >> > Quem puder compartilhar comigo algo a respeito, eu ficarei grato.
> >> >> >
> >> >>
> >> >> O Catalyst é um excelente framework, estável e robusto, e permite o
> >> >> desenvolvimento de aplicações escaláveis desde a primeira linha de
> >> >> código. De fato, ele foi projetado pra isso, então o primeiro
> >> >> resultado pode não ser tão rápido quando em um framework mais
> simples,
> >> >> mas o quinto resultado será muito mais rápido e gratificante. Se vc
> >> >> leu o XKCD dessa semana[http://xkcd.com/844/], o Catalyst faz um
> >> >> esforço bastante válido e razoável pra ligar o "code right" com o
> >> >> "code fast" (e, quem sabe, te tirar eventualmente do loop infinito e
> >> >> levar ao mítico "good code") :-)
> >> >>
> >> >> A agilidade para produzir resultados, infelizmente, e
> >> >> consequentemente, depende do seu grau de conhecimento. Mais ainda
> >> >> (alguns diriam até que principalmente), é importante que ele se
> >> >> encaixe com seu modo de pensar. Como o Catalyst é a grande cola entre
> >> >> soluções de templating e ORMs, vc precisa saber usar todas essas
> >> >> pontas para chegar a resultados palpáveis. Do lado das Views temos o
> >> >> Template Toolkit como escolha da maioria. Já para o Model você pode
> ir
> >> >> do robusto DBIx::Class a alternativas como MongoDB, CouchDB ou mesmo
> >> >> KiokuDB.
> >> >>
> >> >> Experimente fazer o
> >> >> tutorial[http://search.cpan.org/perldoc?Catalyst::Manual::Tutorial]
> e
> >> >> ver se vc se sente confortável com o Catalyst. O tutorial cobre ainda
> >> >> o básico de Template Toolkit e DBIx::Class. Se gostar, pode comprar o
> >> >> livro
> >> >>
> >> >> [
> http://www.amazon.co.uk/Definitive-Guide-Catalyst-Maintainable-Applications/dp/1430223650?&camp=2486&linkCode=wey&tag=enligperlorga-21&creative=8882
> ].
> >> >> Se não gostar, não vale muito a pena insistir, e o mundo Perl está
> >> >> cheio de alternativas bacanas para outros meios de pensar, como o
> >> >> Mojolicious e o Dancer.
> >> >>
> >> >> O desempenho de soluções web depende muito da infraestrutura por
> >> >> baixo. Se vc vem de Rails, sabe que um bom hardware faz toda a
> >> >> diferença, que o grande gargalo é o banco, e que muitas vezes sai
> mais
> >> >> em conta pagar por uma melhoria na infra do que pagar um ou mais devs
> >> >> pra otimizar o código. Dito isso, sim, as facilidades oferecidas pelo
> >> >> Catalyst compensam e muito o overhead que ele causa, ainda mais
> >> >> rodando em cima de um fastcgi.
> >> >>
> >> >> Ao contrário de muitas soluções, o Catalyst não coloca propaganda em
> >> >> headers ou coisa que o valha, então é difícil listar sites com ele a
> >> >> menos que o dev procure a comunidade e avise. Se vc quer um exemplo
> de
> >> >> "projetos que já usam Catalyst em ambiente de grande demanda de
> >> >> acessos simultânos", um bom exemplo é o YouPorn[
> http://www.youporn.com
> >> >> - NSFW], que circula entre os 50 sites mais visitados do mundo. O
> >> >> iPlayer da BBC não é muito conhecido aqui no Brasil, mas também é de
> >> >> altíssimo tráfego.
> >> >>
> >> >> Espero ter ajudado. Se sobrou alguma dúvida, tamos aí pra isso :-)
> >> >>
> >> >> []s
> >> >>
> >> >> -b
> >> >> =begin disclaimer
> >> >>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> >> >>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
> >> >>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> >> >> =end disclaimer
> >> >
> >> >
> >> >
> >> > --
> >> > Rogerio Ferreira
> >> > http://rogerioferreira.objectis.net
> >> > http://www.howtoday.com.br
> >> > http://events.linuxfoundation.org/events/linuxcon-brazil/schedule
> >> > http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf
> >> > Fone: (11) 9424-0419
> >> > --------------------------------------------------------
> >> > LPI 302 (Mixed Environment) Specialty
> >> > Senior Level Linux Professional (LPIC-3)
> >> > Advanced Level Linux Professional (LPIC-2)
> >> > Junior Level Linux Professional (LPIC-1)
> >> >
> >> > =begin disclaimer
> >> >   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> >> >  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
> >> >  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: SaoPaulo-pm at pm.org
> >>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> >> =end disclaimer
> >
> >
> >
> > --
> > Rogerio Ferreira
> > http://rogerioferreira.objectis.net
> > http://www.howtoday.com.br
> > http://events.linuxfoundation.org/events/linuxcon-brazil/schedule
> > http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf
> > Fone: (11) 9424-0419
> > --------------------------------------------------------
> > LPI 302 (Mixed Environment) Specialty
> > Senior Level Linux Professional (LPIC-3)
> > Advanced Level Linux Professional (LPIC-2)
> > Junior Level Linux Professional (LPIC-1)
> >
> > =begin disclaimer
> >   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> >  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
> >  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: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110107/bf176423/attachment-0001.html>


More information about the SaoPaulo-pm mailing list