5
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 [email protected]

Oficina cake php

Embed Size (px)

Citation preview

Page 1: Oficina cake php

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

[email protected]

Page 2: Oficina cake php

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çosO 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

[email protected]

Page 3: Oficina cake php

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çosCom 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-ControllerMVC 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

[email protected]

Page 4: Oficina cake php

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 MappingO 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 DeleteEm 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

[email protected]

Page 5: Oficina cake php

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ãoNeste 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ênciasCakePHP (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

[email protected]