[SP-pm] CGI
Luis Motta Campos
luismottacampos em yahoo.co.uk
Quinta Abril 26 00:13:37 PDT 2007
On Apr 26, 2007, at 1:34 AM, André Walker wrote:
> Faz tempo que não escrevo nada, mas sempre leio as discussões que
> há por
> aqui... E fiquei com uma dúvida.
> Vocês são tão categoricamente contra CGI, e tão a favor de Catalyst...
Catalyst é a versão mais moderninha, mas eu já usava frameworks
baseados em MVC para construir aplicações cliente-servidor desde
1998. Uma das mais destacadas desde então, na minha opinião, mas que
"morreu" por falta de colaboradores comprometidos (ou não, eu parei
de acompanhar) é o MyPole.
> Primeiro eu quero entender exatamente o que vocês querem dizer por
> CGI.
> 1. CGI como uma aplicação interpretada por um interpretador externo ao
> servidor, ou seja, o contrário de "mod_perl", no caso de Perl com
> Apache... (haha, não sei explicar direito :-) )
CGI é a sigla para Common Gateway Interface.
Na lista, chamamos "CGI" qualquer programa que implemente este
padrão.
Você deve conhecer muitos.
Não, isso não é o "contrário" de coisa nenhuma, isto não pode ser
enunciado como uma Álgebra... ;-)
ModPerl é um conjunto de bibliotecas (para Perl e para o Apache)
que permite que se escrevam extensões para o Apache em Perl, para
cada uma das 12(?) etapas de um request, como você já deve saber.
> 2
> a. O módulo CGI que vem com o Perl...
Este módulo faz coisas bem bacanas. Mas ele é muito velho, está
muito maltratado por causa da forma como foi construída e não deveria
ser mais utilizado, por uma questão de que a gente não pensa mais
aplicações para a Web daquela forma faz muito tempo. Ele é
ineficiente, produz código ruim, obriga a programação de improviso e
a geração de código e HTML no mesmo arquivo (o que é considerado um
"pecado mortal").
> b. Qualquer módulo que comece com CGI::
Calma. Ninguém aqui generaliza nada, por favor.
> Pergunto porque uso CGI::Application. Uso também mod_perl.
> Pesquisei uma
> comparação entre Catalyst e CGI::Application e não encontrei muita
> diferença... nunca peguei pra programar em Catalyst, mas valeria
> tanto a
> pena assim?
O Catalyst tem scripts de ajuda e uma estrutura muito mais
organizada, simples de implementar e de manter. Ele te obriga a
modularizar muito mais do que o CGI::Application.
O CGI::Application é interessantinho, mas é uma classe de muito
baixo nível. Você precisa extender ele bastante para que ele comece a
dar bons resultados. Na mão de um novato, é desastre na certa. Agora,
se você tem uns anitos de estrada, sabe quem são os "Quatro Amigos",
conhece RUP e usa Test-Driven development, vai conseguir usar isto
sem grandes dificuldades.
> Outra coisa, uso HTML::Toolkit, mas o Luís sempre indica
> Template Toolkit.... questão de preferência ou é melhor mesmo?
HTML::Template foi uma das primeiras coisas que eu tentei, 8 anos
atrás, para parar de usar CGI para gerar HTML na saída.
Lamentavelmente, ele peca pela penúria de recursos. É ótimo se você
precisa apenas de coisas simples, mas eu tenho muitas coisas que
implemento diretamente em TT sem me preocupar mais em escrever um
módulo para implementar o "View" do MVC.
É questão de preferência, mas eu recomendo conhecer ambos. Os
conceitos evoluem, e a gente pode aprender muita coisa comparando.
Por exemplo, eu gosto de passar objetos DBI::Statement para o meu
Template, coisa que não posso fazer com HMTL::Template:
__PERL__
use strict;
use warnings;
use DBI;
use Template;
my $dbh = DBI::connect( $dsn, $user, $pass ) or die $DBI::errstr;
my $query = q{SELECT login, name, email FROM users WHERE login
LIKE 'l%'};
my $sth = $dbh->prepare( $query );
if( $sth->execute ) {
my $tt = new Template;
$tt->process( 'user/list.tmpl', { users => $sth } ) or die $tt-
>error();
} else { die $sth->errstr; }
$sth->finish;
$dbh->disconnect;
__END__
# TT template armazenado em user/list.tmpl:
[% WRAP 'html/standard_page.tmpl' %]
[% WHILE ( user = users.fetchrow_hashref ) %]
<div class="user"> [% user.login %], [% user.name %], [%
user.email %]</div>
[% END %]
# EOF
Como você pode ver, eu posso manipular objetos Perl de dentro do
meu Template, coisa que não se pode fazer com o HTML::Template. Por
causa destas sutilezas, eu prefiro usar o TT. Claro, isto é mesmo
questão de preferência. E faz muito tempo que eu não codifico nada
para a web, já que agora eu trabalho no backend dos serviços da
empresa, construindo parsers (e corretores) para p XML cagado que a
gente recebe dos fornecedores e clientes. :-(
Espero que isso ajude.
Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão SaoPaulo-pm