# Aplicativos em PHP/Geradores de Aplicativos
## Geradores de Aplicativos

"Um livro é um mudo que fala, um surdo que responde, um cego que guia, um morto que vive." (Padre António Vieira)
* phpCodeGenie (com MySQL)
* SQLMaestro (com MySQL, Oracle, MS SQL Server, PostgreSQL, SQLite, Firebird e MaxDB)
* phpMyEdit (com MySQL)
* DadaBik (com vários)
* PHPLibDev (com PostgreSQL)
* Web Form Generator (com MySQL)
* PHP Code Generator (com MySQL, PostgreSQL, Access e logo outros)
* Crudin (com MySQL)
Segundo a wikipédia em http://pt.wikipedia.org/wiki/Gerador_de_c%C3%B3digo
Dentro do diversificado leque de categorias de ferramentas que prestam apoio às atividades da Engenharia de Software (CASE), uma específica vem ganhando cada vez mais destaque e, sobre ela, tem-se aplicado muito investimento nos últimos tempos: as Ferramentas de Geração de Código, ou simplesmente Geradores de Código. Destes surgiu o Gerador de Aplicativos.
Dessa forma, Gerador de Código é aquela ferramenta que possui a capacidade de gerar código a partir de um determinado modelo de software. Inclusive, de acordo com alguns pontos de vista e a partir das características específicas do tipo de Gerador de Código, ele passa a ser conversor de códigos de linguagens distintas. Isso acontece, por exemplo, com o compilador, que transforma um código escrito através de uma linguagem de programação para código de máquina ou código objeto.
Tipos mais comuns
Alguns tipos de Gerador de Código valem a pena serem mencionados. Eles possuem características específicas e uma maneira de trabalhar própria que está diretamente ligada aos seus objetivos. O mais básico tipo de gerador de código é o já mencionado compilador, como pode ser visto no artigo Code generation.
Outros dois tipos de gerador de código que estão sendo cada vez mais utilizados em ambiente de produção de software são os geradores de código de IDE’s visuais e os geradores de código baseados em templates.
Geradores de código de IDE’s visuais
Algumas ferramentas de edição integrada (IDE’s), principalmente as chamadas ferramentas de programação visual, precisaram adotar um tipo de gerador de código capaz de traduzir, em linhas de código, tudo aquilo que é “desenhado” pelo usuário desenvolvedor. Dessa maneira, por trás de ações como arrastar componentes para uma janela de uma aplicação que está sendo construída e configurar visualmente seu comportamento e forma de apresentação, vai existir um mecanismo responsável por transformar em instruções que, quando executadas, reproduzam exatamente aquilo que foi definido pelo usuário desenvolvedor, através de linhas de código da linguagem de programação correspondente à ferramenta IDE. São os também chamados mecanismos WYSIWYG. Tal mecanismo pode ser encontrado em ferramentas como o Borland Delphi, o Oracle JDeveloper ou o Microsoft Visual Studio, quando do desenvolvimento de aplicações tanto de ambiente desktop, como Web.
Geradores de código baseados em templates
Ultimamente, os geradores de código baseados em templates começaram a figurar o elenco das ferramentas CASE presentes em ambiente de produção de software como sendo uma opção para a geração automática e massiva de funcionalidades de aplicações, seja de maneira completa ou parcial.
Ferramentas tais como Velocity (do Apache Jakarta Project), Transformica (do Hammurapi Group) ou CodeFSW (da Unitech Tecnologia de Informação), além de diversas outras que vêm surgindo neste cenário, a depender de como sejam utilizadas, podem viabilizar a geração de código para as diversas camadas de uma aplicação, a partir de templates e parâmetros de entrada. Dessa maneira, tendo a necessidade de possuir diversas funcionalidades semelhantes em suas estrutura e que englobem códigos das camadas da aplicação adotadas em sua arquitetura, uma aplicação pode ser desenvolvida, em grande parte, com a ajuda de tais ferramentas.
Principais vantagens
Certamente que as vantagens adquiridas ao se adotar Geradores de Código em um ambiente de produção de software só aparecem quando da boa utilização dessas ferramentas. A partir do uso adequado dos geradores de código, sejam quais tipos forem, a equipe de produção de software perceberá um ganho significativo em sua produtividade, sendo capaz de realizar a construção de funcionalidades das aplicações de maneira mais eficiente e segura, garantindo também a diminuição dos custos de projeto.
Uma outra vantagem que é vista de maneira bastante clara se refere à padronização percebida no código gerado, visto que pode se basear, a depender do tipo, tanto em um template utilizado, como na filosofia de trabalho da ferramenta IDE. E está definitivamente consolidada a idéia de que é um ponto positivo com relação à qualidade do software, ter uma aplicação em cujo código-fonte se percebe um estilo único de programação.
Por fim, pode-se considerar também como uma vantagem do uso de geradores de código, a depender novamente de como são utilizados, a construção de aplicações isentas de grande parte dos artifícios que facilitam a programação propriamente, mas, por outro lado, afetam diretamente o quesito performance. É sabido, por exemplo, que o uso de Reflexão, artifício que é suportado em linguagens como Java e C# e que permite a introspecção e manipulação de classes, interfaces e objetos no geral, afeta negativamente a performance de funcionalidades de aplicações. O uso adequado de geradores de código no processo de desenvolvimento de software pode fazer desnecessário o uso de tal artifício, melhorando o desempenho do produto final. Muitas outras vantagens podem ser percebidas com o uso de geradores de código no processo de construção de software. Mas também vale alertar que tais ferramentas, em vez de contribuir com vantagens, podem atrapalhar o andamento do projeto quando é feito uso inadequado ou desnecessário das mesmas.
Geradores de código em PHP
Como para diversas outras linguagens, também existem bons geradores de código em PHP, existindo ferramentas disponíveis em software livre e software proprietário. Daremos maior ênfase aquelas da categoria software livre, que estão mais de acordo com a filosofia deste projeto e também porque apresentam resultados semelhantes e as vezes até melhores do que as outras.
A grande maioria dos geradores de código existentes em PHP, trabalha de forma similar quando da construção das aplicações. Necessitam que um banco de dados já construído e de uma conexão com esse banco de dados e a partir das informações aí existentes, geram o código para a aplicação. Poderíamos também classificar os geradores de código em PHP em dois diferentes modelos: ativo e passivo.
No modelo ativo, o código se mantém enquanto o gerador estiver ativo, ou seja, para que o aplicativo funcione, é necessária a presença do gerador ou pelo menos de parte integrante dele (um bom exemplo nesse caso é o phpMyEdit). Já no modelo passivo, o gerador cria o código inicial e sua manutenção e funcionalidade passa a depender completamente do desenvolvedor, o PHP-MySQL Wizard pode ser enquadrado nesse modelo. Existem geradores que trabalham somente com OO, linguagem procedural ou um misto.
Vantagens adicionais:
Conforme artigo no code generation, existem vantagens adicionais em se utilizar geradores de código:
1.Padrão de qualidade: o código feito a mão tem sua qualidade variando durante o ciclo de vida de um projeto. Pode começar no alto e decair ou vice e versa. O código gerado aumenta sua qualidade com o tempo pois os erros encontrados podem ser uniformemente reparados na base do código. Nesse quesito, os geradores que têm projetos ativos e que constantemente lançam novas versões ganham pontos. A familiaridade com o gerador por parte do programador também ajuda bastante, visto que dependendo dos seus conhecimentos, ele mesmo pode fazer reparos ou customizações na ferramenta (quando open source) e não somente no código gerado.
2.Consistência: as aplicações geradas são consistentes na estrutura de classes, nomeação de variáveis etc.
3.Produtividade: os geradores constroem o código numa fração muita curta de tempo, economizando horas de trabalho (muitas vezes repetitivo). Isso libera o desenvolvedor para outras tarefas que exijam soluções mais criativas.
4.Abstração: Os geradores frequentemente fornecem uma camada de abstração entre o projeto e a base do código, facilitando o manuseio das regras de negócio.
É interessante notar que entre os desenvolvedores médios e avançados em PHP e creio que também nas outras linguagens, existe uma certa resistência ou menosprezo pelo uso de geradores. É importante estarmos abertos para utilizarmos quaisquer ferramentas que melhorem nossa produtividade, nos poupem trabalho repetitivo e pouco criativo, deixem nosso tempo livre para outras atividades e consequentemente melhorem nossa qualidade de vida. Assim, antes de iniciar seu projeto você deve se perguntar: que ferramentas usarei? Esse ou aquele gerador me será útil em alguma fase? Ele funciona corretamente? Cumpre sua finalidade? Se a resposta é sim, vá em frente e esqueça o preconceito. Com certeza existem projetos para os quais compensa até construir um gerador. Ressalte-seainda que os geradores são somente ferramentas e a qualidade do código gerado vai depender diretamente da sua habilidade em manuseá-las, aplicar ajustes necessários, etc. Como em todo projeto de criação de software, aqueles criados com geradores de código apresentam falhas. Baterias exaustivas de testes, conhecimento profundo da ferramenta e bom planejamento ajudam a corrigí-las. Uma dica valiosa é dar preferência a geradores com projetos ativos, boa documentação, fóruns e/ou listas de discussão. Hoje, alguns dos melhores frameworks em PHP tais como o Cake, Symfony e CodeIgniter possuem ferramentas para gerar código entre suas funcionalidades.