Este documento apresenta o framework CakePHP para desenvolvimento rápido de aplicações web, usando como estudo de caso um sistema gerenciador de produtos e serviços. Descreve as principais características do CakePHP como MVC, ORM e geração automática de CRUD e como estas funcionalidades foram aplicadas no caso de uso.
Minicurso Aplicação Web Utilizando o Framework Laravel
Desenvolvendo rápido com CakePHP
1. Desenvolvendo rapidamente uma aplicação web: um Estudo de caso com
CakePHP
Resumo
PHP é uma linguagem interpretada livre e utilizada para gerar conteúdo dinâmico na
World Wide Web.
A linguagem PHP é de domínio específico, seu escopo se estende a um campo de
atuação que é o desenvolvimento web, seu propósito principal é implementar soluções
web velozes, simples e eficientes. Suas principais características são: Velocidade e
robustez, estruturação e orientação à objetos, portabilidade, tipagem dinâmica, sintaxe
similar a C/C++ e Perl, Open-source.
Nos últimos anos surgiram vários frameworks que agilizam o desenvolvimento de
aplicações web. Diante de tanta diversidade, torna-se relevante conhecer casos de uso
bem sucedidos antes de optar por algum dos frameworks existentes. Este trabalho busca
apresentar o framework CakePHP para desenvolvimento de aplicações web, utilizando
como base o caso de um sistema gerenciador de produtos e serviços de determinada
empresa.
Introdução
No atual cenário de desenvolvimento para web, os prazos para desenvolvimento vêm
sendo reduzidos de maneira inversamente proporcional ao tamanho e complexidade das
aplicações propostas. O uso de um framework aumenta a velocidade e produtividade no
desenvolvimento, os mesmos facilitam a reutilização e geração de código. Porém o ato
aparentemente simples de escolher um framework pode se tornar um grande desafio, isso
graças à enorme diversidade de frameworks e metodologias de desenvolvimento
existentes atualmente.
Com tais questões em pauta, o presente trabalho visa apresentar funcionalidades
existentes no CakePHP, um framework PHP de código livre e mantido por uma
comunidade bastante ativa de desenvolvedores. Para tal, usaremos um estudo de caso:
um sistema gerenciador de produtos e serviços. Estimo que este caso reúna
características comuns a sistemas de informação semelhantes, geralmente presentes em
websites e intranets de empresas, e por isso espero que o trabalho seja de utilidade
àqueles desenvolvedores que buscam ferramentas de desenvolvimento rápido dentre as
tantas existentes.
O presente documento encontra-se dividido em 5 seções. A seção 2 aborda alguns
conceitos iniciais a respeito de frameworks para desenvolvimento web. A seção 3 detalha
a aplicação proposta para o estudo de caso, servindo como base para a seção 4, que
discute a relação entre a aplicação, suas necessidades e o framework usado. Finalmente,
a seção 5 apresenta algumas considerações sobre o trabalho e suas contribuições.
Por: Allan George
george.dd@gmail.com
2. 2. Framework para desenvolvimento web
“Um framework consiste em um conjunto de classes, interfaces e padrões dedicados a
solucionar um grupo de problemas através de uma arquitetura de programação flexível e
extensível.” - Govoni 1999.
“Pode-se ainda definir um framework como sendo uma pequena aplicação completa com
uma estrutura estática e outra dinâmica, desenvolvidas para resolver um conjunto restrito
de problemas” - Fayad 2000.
“Um framework ou arcabouço, em desenvolvimento de software, é uma abstração que
une códigos comuns entre vários projetos de software provendo uma funcionalidade
genérica. Um framework pode atingir uma funcionalidade específica, por configuração,
durante a programação de uma aplicação. Ao contrário das bibliotecas, é o framework
quem dita o fluxo de controle da aplicação, chamado de Inversão de Controle.” -
Wikipedia.org
Existem diversas características presentes nos frameworks, muitas são consideradas
desejáveis em frameworks ditos como voltados para desenvolvimento rápido de
aplicações. Entre elas, encontram-se a implementação automática de funções CRUD
(Create, Retrieve, Update an Delete), ORM (Object-Relational Mapping) e MVC
(Model0View-Controller). A metodologia deste trabalho baseia-se no estudo destas
funcionalidades, aplicadas ao caso de uso em questão.
3. Sistema Gerenciador de Produtos e Serviços
O caso considerado neste trabalho consiste em um sistema para gerenciamento de
produtos e serviços. Este caso foi escolhido através da análise do mercado atual e após a
identificação de possíveis clientes. Outras justificativas para esta escolha foram a
escassez de sistemas comerciais semelhantes e o seu conjunto bem variado de requisitos
que podem ser facilmente supridos com o uso de frameworks.
O banco de dados da aplicação foi modelado a partir dos casos de uso definidos através
da análise, bem como a partir de funções comumente presentes em sistemas do mesmo
gênero. O modelo da aplicação pode ser definido em duas divisões principais: Pessoas e
Produtos e Serviços, conforme ilustrado abaixo:
Figura 1. Diagrama de tabelas da modelagem dos dados para a aplicação.
Por: Allan George
george.dd@gmail.com
3. A primeira seção, Pessoas, consiste das subdivisões Usuários, Tokens e Grupos e
engloba todos aqueles que possuem relação com a instituição detentora do catálogo de
produtos e serviços. A segunda seção, Produtos e Serviços, encontram-se os próprios
produtos, categorias de produtos e imagens, que estão relacionadas aos produtos e às
categorias.
4. Aplicando o framework CakePHP ao caso do Gerenciador de Produtos e Serviços
Com o modelo apresentado na seção anterior, pode-se concluir que as funcionalidades
necessárias à aplicação são na verdade os requisitos desejáveis no framework a ser
usado. Dentre estes requisitos, destacamos alguns, como por exemplo, a criação das
operações CRUD, hierarquia entre tabelas, relacionamentos NxN (ManyToMany - Muitos
para Muitos), divisão do projeto em camadas, para trabalho em equipe, e mapeamento
objeto-relacional. Com tais requisitos em vista, selecionei o framework CakePHP que,
além de ter vasta documentação e uma comunidade de desenvolvedores muito ativa,
possui vários casos de sucesso em uso e é considerada por muitos como o framework
mais fácil de ser usado.
A seguir, alguns dos principais requisitos da aplicação, devidamente analisados e
implementados no protótipo.
4.1. MVC - Model-View-Controller
MVC consiste em separar modelagem, apresentação e fluxo dos dados em camadas
distintas, permitindo o desenvolvimento, teste e manutenção isoladamente nestas
camadas.
A camada Models é considerada a representação da modelagem dos dados, quando há
mudanças nestes dados o model informa seus observadores.
Figura 2. Código exemplo do modelo Produto no CakePHP
Por: Allan George
george.dd@gmail.com
4. A camada Views apresenta os dados num formato adequado ao usuário, podendo existir
diferentes views para um único modelo, com diferentes propósitos. O controller é
responsável pelo fluxo de dados entre o banco de dados e as views.
4.2. ORM - Object-Relational Mapping
O Mapeamento Objeto-Relacional é uma técnica de desenvolvimento usada para
conversão entre o modelo orientado a objetos usado na aplicação e o banco de dados
relacional. Aqui as tabelas do banco de dados são representadas através de classes e os
registros são representados como instâncias das classes correspondentes.
Graças a esta técnica, os programadores não precisam fazer uso da linguagem SQL, o
que será usado é uma interface de programação mais simples que fará o trabalho de
persistência.
O CakePHP faz o mapeamento das tabelas do banco de dados relacional em classes da
aplicação, que estendem a classe AppModel, já inclusa no framework. Para cada tabela/
classe haverá um arquivo com os relacionamentos (1x1, 1xN, NxN), validações, funções
específicas e comportamentos, não há necessidade de especificar todos os atributos da
tabela. Estes arquivos podem ser gerados de forma automática através da linha de
comando. Não é possível alterar a estrutura das tabelas do banco de dados via aplicação.
Os relacionamentos são expostos através de associações dos tipos hasMany, belongsTo,
hasOne e hasAndBelongsToMany, que são implementadas através de atributos contendo
informações a respeito desses relacionamentos, como chaves estrangeiras, nomes das
classes envolvidas, etc. No CakePHP o conceito de herança do padrão de orientação a
objetos não possui ligação com o modelo de banco de dados relacional, sendo utilizado
apenas em sua forma original do padrão, ou seja, para herdar métodos e atributos da
classe pai. Então na aplicação estudada, o reaproveitamento de dados comuns entre as
classes deve ser interpretado como um relacionamento.
4.3. CRUD - Create, Retrieve, Update and Delete
Em sistemas que fazem uso de banco de dados, as principais operações consistem em
adicionar, consultar, editar e destruir dados. O uso dessas quatro operações para a
maioria das tabelas faz com que a automatização seja vantajosa para o ganho de
velocidade no desenvolvimento.
Figura 3. Tela de inserção de Produto criada com a ferramenta de automação do CakePHP, o bake.
Por: Allan George
george.dd@gmail.com
5. No CakePHP podemos lançar mão de dois recursos preciosos no que diz respeito a
criação de formulários para manutenção de informações das tabelas do banco de dados.
Uma delas é o Bake, que gera os arquivos dos Models, Views e Controllers de acordo
com as características da tabela selecionada. Já com o Scaffold, podemos gerar estes
formulários em tempo real sem a necessidade de se criar os arquivos das Views, porém,
tal recurso não deve ser usado em uma aplicação após ser posta em produção, na
realidade este recurso apenas serve para testar as funções dos Controllers e Models. A
implementação do Scaffold é feita a partir da declaração da variável “$scaffold” no
controller desejado e, automaticamente, os métodos de recuperação, inserção, edição e
remoção estarão disponíveis para aquele controller. Relacionamentos simples (1x1, 1xN e
NxN sem atributos da relação) são gerados de maneira automática.
5. Conclusão
Neste artigo analisei o framework CakePHP para desenvolvimento rápido de uma
aplicação web. Ele é distribuído como Software Livre e foi aplicado ao caso de
desenvolvimento de um Sistema de Gerenciamento de Produtos e Serviços. Observamos
as funcionalidades deste framework, como tais funcionalidades poderiam apoiar o
desenvolvimento e como podemos implementa-los no caso em questão.
Apesar de existirem vários outros frameworks para a mesma linguagem usada no
CakePHP, preferi abordar o uso do mesmo pelo fato de considera-lo o mais rápido e fácil
para implementações novas e até mesmo migrações de aplicativos que já se encontram
em produção. Com a quantidade de programadores envolvidos no seu desenvolvimento,
teremos sempre um framework atual, com plugins que adicionam funcionalidades novas
de maneira fácil e rápida ao núcleo do mesmo e que irão sanar as necessidades dos mais
variados casos. Independente da escolha, deve-se sim considerar o uso de um
framework, pois os mesmos mostram-se bastante efetivos quanto à aceleração no
desenvolvimento de uma aplicação web e, sem eles muitas horas de programação seriam
necessárias para se chegar ao mesmo resultado. Antes da escolha por um ou outro
framework, deve-se analisar diversos fatores que vão além dos recursos disponíveis no
servidor da aplicação., passando até mesmo pela capacidade dos recursos humanos
envolvidos no projeto, curva de aprendizagem da nova ferramenta e longevidade do
framework escolhido, escolher um framework com uma comunidade pequena ou dispersa
poderia tornar o projeto órfão, preso em um framework estagnado.
Referências
CakePHP (2009). The CakePHP framework. http://cakephp.org
Fayad, M. E. (2000). Introduction to the computing surveys electronic symposium on
object-oriented application frameworks. ACM Comput. Surv., 32(1):1-9 http://
www.engr.sjsu.edu/fayad/column/CACM/ACMPub/p1-fayad.pdf
Fayad, M. E. and Schmidt, D. C. (1997). Object Object-oriented application frameworks.
Commun. ACM, 40(10):32-38 http://www.engr.sjsu.edu/fayad/publications/columns/p32-
fayad.pdf
Govoni, D. (1999). Java Application Frameworks. John Wiley & Sons.
Wikipedia, a enciclopédia livre - http://pt.wikipedia.org/wiki/Framework e http://
pt.wikipedia.org/wiki/CRUD
Por: Allan George
george.dd@gmail.com