Veremos hoje um eficiente gerador de código para PHP, o Qcodo.
Muitas vezes a utilização deste tipo de ferramenta é muito útil,
pois poupa tempo e sacrifício por parte do programador e, além de
tudo, faz com que o código fique mais organizado.
Geradores
de código são frameworks que utilizam ORM (Object Relational
Mapping). Em suma, ORMs tratam as tabelas de um banco de dados
relacional como classes. Isso facilita para o desenvolvedor, pois não é
necessário criar classes com conexões com o banco de dados, e
principalmente faz com que a aplicação seja independente do SGBD,
pois os métodos de acesso ao banco (conexão, execução de queries
e etc), são implementados pelo próprio framework. Imagine
desenvolver uma aplicação para Oracle e ao final do produto, você
tenha que escrever seu código todo compatível com DB2. Certamente
um esforço muito grande.
Nem
sempre é indicado o uso de geradores de código; em aplicações
críticas por exemplo, não é viável. Mas quando se trata de
aplicações menores, em que o tempo de entrega do produto é
prioridade, com certeza é uma excelente opção.
Existem
bons geradores de códigos para linguagens proprietárias, como o DEV
Force IdeaBlade para .NET, que também é um produto
pago.
Qcodo
O Qcodo é um framework de
desenvolvimento para aplicações web open-source, feito para PHP5.
Utiliza ORM, CRUD (Create, Retrive, Update, Delete). Traz recursos
como internacionalização e interfaces para funcionalidades AJAX,
dentre outros.
Ele é
divido em três principais partes, que são:
- Gerador de códigos (constrói
um ORM a partir da base de dados relacional) e assim a interface
parar o ORM. - Qforms (classes Orientadas a
Objeto geradas). - Qquery (utliza a SQL baseada
nas classes orientadas a objeto geradas) .
Em sua
página
é possível obter mais informações sobre projeto, exemplos
práticos e o download do código.
Exemplo de utilização
Neste exemplo irei
mostrar como um formulário é gerado rapidamente no Qcodo.
Praticamente basta indicar o banco de dados e todos os formulários
com as funções CRUD das tabelas é gerado.
Faça o download da última versão
do Qcodo (enquanto escrevia este artigo, a versão estável era a
0.4.10).
Após feito o download, crie um
diretório no DocumentRoot e descompacte os diretórios WWW, CLI e
INCLUDES do Qcodo para o diretório criado. Para nosso exemplo, vamos
chamar esse diretório de Qcodo_exemplo. Para verificar qual o
diretório DocumentRoot que seu Apache utiliza, basta verificar o que
é indicado nesta mesma variável no arquivo de configuração do
Apache, o http.conf.
Feito isto, renomeie o arquivo
codegen.xml-dist em CLI/SETTINGS/ para codegen.xml. Copie os arquivos
QApplication.class.php-dist e configuration.inc.php-dist dentro de
INCLUDES/QCODO/_CORE/ para INCLUDES e renomei-os para
QApplication.class.php e configuration.inc.php, respectivamente.
Com os arquivos já copiados e
renomeados dentro de INCLUDES, agora temos que editar o arquivo
configuration.inc.php. Neste arquivo, informamos qual o nosso
diretório DocumentRoot e o nosso alias para o exemplo
(Qcodo_exemplo). Além de informar os parâmetros de conexão com o
banco de dados.
A constante __DOCROOT__ dentro de
configuration.inc.php armazena nosso DocumentRoot, portanto basta
inserir o seu diretório DocumentRoot. Na constante __SUBDIRECTORY__,
adicionamos Qcodo_exemplo/www. Mas abaixo, basta informarmos os
parâmetros da conexão com o banco de dados. Nosso arquivo pronto
ficará parecido com a figura 1:
Figura 1: Configuração do
arquivo configuration.inc.php
No meu caso, o meu DocumenRoot é
C:\xampp\htdocs, mas basta substituir pelo seu. Perceba que no caso
do exemplo estiver sendo realizado no Windows, a barra separadora de
diretórios deve ser colocada invertida (/ ao invés de \).
Nesta
página há uma demonstração dos parâmetros para as conexões com os principais
SGBDs, que deverá ser informado na constante DB_CONNECTION. Sobre o
banco de dados do nosso exemplo, será usado o MySQL. Para a criação
do banco, segue as instruções SQL:
CREATE DATABASE qcodo;
USE qcodo;
CREATE TABLE usuarios (
id INT(11) NOT NULL AUTO_INCREMENT, nome VARCHAR(50),
PRIMARY KEY (id)
);
CREATE TABLE cidade (
codCidade INT(11) NOT NULL AUTO_INCREMENT, nome VARCHAR(50),
PRIMARY KEY (codCidade)
);
INSERT INTO usuarios (nome) VALUES ('PHP'),('MySQL'),('Qcodo');
INSERT INTO cidade (nome) VALUES ('Cataguases'), ('São Paulo'), ('Leopoldina');
Agora,
basta abrir o browser e digitar o endereço
http://localhost/Qcodo_exemplo/www.
Se tudo ocorrer bem, uma página similar à figura 2 será exibida:
Figura
2: Página inicial da configuração do Qcodo
Esta página mostra as informações
de conexão com o banco de dados e outras informações. Nela é dito
para executar um arquivo que fica dentro de CLI, o qcodo. Este
arquivo se encarregar de gerar as classes com os formulários para
cada tabela do banco de dados.
Para sistemas POSIX, você deve
editar o arquivo qcodo. Se seu sistema é Windows, edite o arquivo
qcodo.bat.
Para e edição você deve informar na
variável PHP_COMMAND qual o seu diretório do PHP (para sistemas
Windows).
Feito isto, basta abrir o prompt de
comandos do seu sistema operacional e executar o comando qcodo
codegen, como mostrado na tela de apresentação que você gerou.
Se tudo ocorrer bem, o resultado será
similar ao da figura 3:
Figura 3: Resultado
do comando gerador de classes
Agora foi feito o mapeamento do banco
de dados, e geradas as classes. Entre novamente na url inicial do
qcodo, e selecione /Qcodo_exemplo/www/drafts. Será exibida uma lista
com opções de selecionar todos os dados das tabelas ou inserir
dados, como na figura 4:
Figura 4: Listagem
de todas as tabelas do banco de dados
Além disto, temos a opção de
visualização dashboard.
Para ilustrar todos os passos acima,
há um vídeo
em inglês onde é feita a demonstração.
Conclusão
O Qcodo é simples de usar, se comparado a outros geradores de
código para PHP. Como dito no início, geradores de código
facilitam o desenvolvimento da aplicação, poupando tempo. Mas em
alguns casos, não são viáveis, sendo a melhor solução a boa e
velha filosofia de que “se você necessita, faça você mesmo”.
Espero ter sido útil. Um abraço a todos.