Palavra:   

Revista PHP / Frameworks

Greg Brown

Gerente de Tecnologia e programador PHP.

Uma Introdução aos frameworks

Uma introdução aos frameworks

Depois do crescimento de popularidade do Ruby on Rails, apareceu uma enorme gama de frameworks e scaffolding platforms para o PHP. Dentre as centenas de opções que nasceram, restaram algumas que tem aplicações práticas no mundo real.
Antes de mais nada, é importante explicar o que de fato é um framework,  um scaffolding platform e como eles diferem de um CMS. Eu acho importante isso pois é muito comum você ver essa confusão em IRCs, fóruns e afins...
CMS – Content Mangement System – é basicamente um sistema já pronto, com funcionalidades prontas, interfaces de usuário e etc... os mais comuns são o Joomla ou o Mambo, Wordpress e o Drupal. Existem milhares de outros, e cada um tem sua peculiaridade.

Scaffolding Platform – O que mais se assemelha ao Ruby on Rails. Esse tipo de plataforma gera uma grande parte do código de uma aplicação dinamicamente. Ou seja, você configura e roda ele, o SP se encarrega de gerar o código necessário para atender as mais básicas funcionalidades como inserir, atualizar, editar, e apagar. Alguns vão além disso.
Framework – em sua essência, é o conjunto de organização de código, junto com bibliotecas de desenvolvimento, organizadas de um jeito que facilita o desenvolver de um projeto.

Prós e contras de cada um

Os CMS-
Prós

Requerem o menor tempo de desenvolvimento. Muitas vezes, são a melhor opção na hora de entregar algo pro seu cliente, necessitando apenas de modificações de layout. Geralmente possuem grandes quantidades de bibliotecas de suporte que oferecem ao desenvolvedor o máximo de funcionalidades com o mínimo de codificação.
Contras
Quando se precisa desenvolver alguma funcionalidade especial, a curva de aprendizagem é muito alta. A complexidade desses sistemas geralmente faz com que o desenvolvimento de uma simples funcionalidade seja difícil e demorado.

Scaffolding Platforms
Prós

Algumas das tarefas mais chatas de programação são com relação a criação de sisteminhas administrativos. São muitas vezes dezenas de listagens de tabelas de banco, todas muito similares. Uma boa parte do tempo de desenvolvimento e testes são investidos em criação de objetos de insert, update e delete, geralmente utilizando-se do tão útil copy&paste. O potencial de erros é elevado exponencialmente. O SP eliminia quase que por inteiro este processo. O sistema gera a grande parte deste código para você. Isso reduz o risco de propagação de um erro, ou erros por digitação, padroniza os administrativos, e assim por diante.
Contras
Uma vez gerado os códigos, implementações de mudanças são complicadas. Adicionar campos em uma tabela, modificar relacionamentos entre as mesmas podem influenciar a funcionalidade do sistema. Modificar essas classes geradas dinamicamente é bem complicado. Se você gerar novamente os códigos dinamicamente, você corre o risco de perder as modificações que você fez, tendo em vista que o software re-escreve os arquivos.

Frameworks
Prós

A maioria dos frameworks são desenvolvidos para reduzir a quantidade de trabalho do desenvolvedor. Eles permite a maior flexibilidade na hora de desenvolver um aplicativo, tendo em vista que eles não possuem nenhum “código pronto” como as duas opções acima. As rotinas já prontas dos frameworks, em geral, reduzem o tempo gasto com desenvolvimento, deixando o desenvolvedor livre para focar na funcionalidade do código ao invés de criar rotinas de suporte.
Contras
Além de, muitas vezes, terem uma metodologia própria de desenvolvimento, os Frameworks tem uma curva de aprendizagem que pode ser bem alta. Frameworks raramente tem interfaces prontas, ou seja, você essencialmente começa do zero qualquer projeto.


Quando utilizar?
A pergunta que mais recebo é sem dúvida essa. A resposta nunca é fácil e depende de detalhes específicos dos seus projetos. Vou delinear quando eu usuária cada um destes tipos de “ponto de partida” e espero que eles sirvam de base para suas decisões no futuro.

CMS – Um CMS é mais útil quando seu cliente quer funcionalidades gerais que já existem.  Se, por exemplo, ele quer um blog genérico, você poderia rapidamente desenvolver um com base no wordpress ou drupal. Se ele quer um site de notícias, o Joomla poderia ser uma opção viável. Isso tudo é viável contato que o cliente seja um de poucas peculiaridades, se ele quer as funcionalidades mais genéricas.
Vale lembrar, que cada CMS tem seu modelo de trabalho. O Wordpress e o Joomla podem ser utilizados para a mesma finalidade, porém, cada um tem um modelo de utilização completamente diferente. Você, essencialmente vai precisar ensinar seu cliente à utilizar o administrativo.

Scaffolding Platforms – Você tem um projeto simples, direto, que tem funcionalidades específicas que não são atendidas pelos modelos já existentes, e cujo modelo não vá mudar. Se o prazo é curto, então esta seria a melhor opção. Um exemplo seria um site de tempos de corrida de rua. O modelo (banco de dados), se bem desenvolvido, não precisa mudar, assim o desenvolvedor pode passar a maior parte do tempo focado em utilizar o modelo criado ao invés de criar um modelo.

Frameworks – Você tem um projeto específico, que tem necessidades espcíficas, o projeto tende a ser um projeto de médio a longo prazo, que vai ter manutenção periódica, são esperadas melhorias constantes na aplicação, ou você tem um projeto que será entregue em fases, com funcionalidade adicionadas ao longo do tempo, essa é sem dúvida a melhor opção.

Finalizando
Bom, agora já temos uma visão das diferenças entre CMS, SP, e Frameworks.

Hoje, existem 3 grandes Frameworks em utilização, o CakePHP,  CodeIgniter e o ZendFramework. (sim existem milhares de outros – porém, estes estão entre os os mais famosos).
Cada um tem suas peculiaridades, não pretendo entrar em uma discussão de qual é melhor ou qual é pior. Acredito que seja uma questão de você tentar os três e descobrir qual se enquadra melhor na sua linha de produção.
Por uma questão pessoal, eu utilizo o CodeIgniter e o ZendFramework, sendo que entre os dois, me acho mais facilmente no CodeIgniter. Embora o Cake seja muito bom, eu acho que ele acaba sendo muito pesado (novamente uma opinião pessoal).
Como eu utilizei ele muito pouco, não vou comentar sobre ele.

Ambos os frameworks, CI e ZF são baseados em modelos MVC (Model View Controller). O CI tem uma curva de aprendizagem muito baixa, ou seja, você consegue sair programando com ele em tempo recorde. O Zend, já tem uma complexidade maior, porém, o Zend é da Zend... preciso dizer mais?

Bom de introdução ao mundo dos frameworks, acho que já deu. Minha sugestão seria que você estudasse um pocuo sobre cada framework (visite os links abaixo) e tentasse brincar com eles um pocuo.

Se você está em uma equipe, a utilização de um framework facilita muito o trabalho em grupo. Se todos adotam o mesmo padrão de codificação, é muito mais fácil identificar erros e dar manutenção nos códigos posteriormente.

Links
http://cakephp.org/
http://codeigniter.com/
http://zendframework.com/

Algumas outras referências:
http://www.mustap.com/phpzone_post_73_top-10-php-mvc-frameworks
http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html
http://www.phpit.net/article/ten-different-php-frameworks/
http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks

Opções de Interação

Comentários

cakePHP
Por: Tylër, 27/07/2010   19:42:46
O cakePHP mudou minha vida! \o/
Não faz nem uma semana que estou no cake e já produzi muita coisa em 3 projetos online ^^
Framework vs SP
Por: Rodrigo, 08/07/2009   11:55:23
Eu nao vejo essa distinção entre frameworks e scaffolding platforms... Por exemplo, tanto o Rails quanto o Cake são frameworks que possuem ferramentas de scaffolding que encurtam o tempo de desenvolvimento.
Ferramenta nacional muito boa
Por: arlindo, 28/10/2008   14:57:51
Aqui no brasil temos um gerador de php, voltado para os sistemas orientados a negócios chamado ScriptCase que é bem legal, mais de 1000 grandes empresas no brasil ja à utilizam, inclusive IBM , Prodesp, Proderj, etc.

Tem mais as caracteristicas de uma aplicação do tipo Scaffolding Platform, por exemplo, com 3 cliques de mouse criamos uma interface simples de cadastro, ou de listagem, baseada em qualquer banco de dados, sendo que a ferramenta permite que o desenvolvedor php codifique regras de negócios bem complexas e as manutenções nas aplicações geradas é bem simples também, o que já aproxima o ScriptCase de um FrameWork, há uma versão trial em www.scriptcase.com.br