SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
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. 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
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
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
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

Más contenido relacionado

La actualidad más candente

Apostila de sql basico
Apostila de sql basicoApostila de sql basico
Apostila de sql basicoFernando Palma
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) Grupo Treinar
 
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...Esdras Da Silva
 
Aula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoAula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoMaria Alice Jovinski
 
Modelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLModelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLClaudio Martins
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...tdc-globalcode
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
TEES - MDA Apresentação Final
TEES - MDA Apresentação FinalTEES - MDA Apresentação Final
TEES - MDA Apresentação Finalguestc7f5eb
 
Programação para Web II: JavaServer Faces
Programação para Web II: JavaServer FacesProgramação para Web II: JavaServer Faces
Programação para Web II: JavaServer FacesAlex Camargo
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOLeonardo Sousa
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIgor Takenami
 
Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...
Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...
Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...Alessandro Marchi Panaccione
 
Enterprise services com .net
Enterprise services com .netEnterprise services com .net
Enterprise services com .netFernando Palma
 

La actualidad más candente (20)

Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
Apostila de sql basico
Apostila de sql basicoApostila de sql basico
Apostila de sql basico
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
Apostila ADO.NET
Apostila ADO.NETApostila ADO.NET
Apostila ADO.NET
 
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...
Resenha Crítica Comparativa - Inovando o Desenvolvimento Web com JSF e Design...
 
Aula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoAula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniao
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Modelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLModelagem Aplicações Web com UML
Modelagem Aplicações Web com UML
 
Diagramas de componentes
Diagramas de componentesDiagramas de componentes
Diagramas de componentes
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Framework Miolo
Framework MioloFramework Miolo
Framework Miolo
 
TEES - MDA Apresentação Final
TEES - MDA Apresentação FinalTEES - MDA Apresentação Final
TEES - MDA Apresentação Final
 
Programação para Web II: JavaServer Faces
Programação para Web II: JavaServer FacesProgramação para Web II: JavaServer Faces
Programação para Web II: JavaServer Faces
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAO
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
 
Jsf
JsfJsf
Jsf
 
Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...
Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...
Artigo de Protótipo de Sistema de Gerenciamento de Rotas para Transporte Cole...
 
Enterprise services com .net
Enterprise services com .netEnterprise services com .net
Enterprise services com .net
 
Metastorm ProVision
Metastorm ProVisionMetastorm ProVision
Metastorm ProVision
 

Similar a Desenvolvendo rápido com CakePHP

Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...Marcelo Palladino
 
Metodologia de desenvolvimento de sistemas
Metodologia  de desenvolvimento de sistemasMetodologia  de desenvolvimento de sistemas
Metodologia de desenvolvimento de sistemasPriscila Stuani
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endGiovanny Valente
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Zachman framework
Zachman frameworkZachman framework
Zachman frameworkJoao Santos
 
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...Lucas Furtado de Oliveira
 
Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)marcondes da luz barros
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal RailsLuiz Costa
 
Ebook AngularJS | Guia Introdutório
Ebook AngularJS | Guia Introdutório Ebook AngularJS | Guia Introdutório
Ebook AngularJS | Guia Introdutório Portal GSTI
 
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Lenin Abadie
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...tdc-globalcode
 

Similar a Desenvolvendo rápido com CakePHP (20)

Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
 
Metodologia de desenvolvimento de sistemas
Metodologia  de desenvolvimento de sistemasMetodologia  de desenvolvimento de sistemas
Metodologia de desenvolvimento de sistemas
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
Artigo c#
Artigo c#Artigo c#
Artigo c#
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Zachman framework
Zachman frameworkZachman framework
Zachman framework
 
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
 
Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal Rails
 
Ebook AngularJS | Guia Introdutório
Ebook AngularJS | Guia Introdutório Ebook AngularJS | Guia Introdutório
Ebook AngularJS | Guia Introdutório
 
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
 
Intro aspnet webapi
Intro aspnet webapiIntro aspnet webapi
Intro aspnet webapi
 
Minicurso Aplicação Web Utilizando o Framework Laravel
Minicurso Aplicação Web Utilizando o Framework LaravelMinicurso Aplicação Web Utilizando o Framework Laravel
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