Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

Post on 22-Apr-2015

121 views 1 download

Transcript of Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

Implementação MVC

Pedro Antonino

Agenda

• MVC• Desenvolvendo com Play

MVC

Model View

Controller

Separação das preocupações:- Interação do

usuário- Apresentação- Lógica de

negocios

MVC Passivo

ControlladorAtualiza view

Http response

MVC Passivo

Browser Servidor

HttpRequest

HttpResponse

View

MVC Passivo

Browser Servidor

HttpRequest

HttpResponse

View

Framework

• Conjunto de design patterns implementado e configurável para um dado projeto

Play Framework

• Framework Java• Alta produtividade para Web• Multi-plataforma: Windows, MacOS, Linux• MVC• 2.0.4

Porque Play

• Java EE– Muita configuração, Muito XML– Vários frameworks– JSF: simplifica Java EE

• Struts– Simplifica a criação dos controllers– Integrar com outros Frameworks

• Play– Integração de alguns frameworks + Parte original de Play– Pouca configuração, XML free

Desenvolvendo com Play

• Uma aplicação web simples usando Play– Estrutura inicial do projeto– Framework está OK– Mapeamentos: requisições -> ações dos

controllers– Criar stubs das ações nos controllers– Criar a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

Exemplo: RealizarDOC

• A implementação de uma parte do caso de uso

• Por enquanto, temos uma transferência de uma conta para outra

Criação da estrutura inicial

• Através do console Play:– Usando o commando new, criar a estrutura inicial

da aplicação

Estrutura de um projeto Play

Desenvolvendo com Play

• Uma aplicação web simples usando Play– Estrutura inicial do projeto– Aplicação está OK– Mapeamentos: requisições -> ações dos

controllers– Criar stubs das ações nos controllers– Criar a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

Servidor

• Executado com o comando run do console Play

• Mudanças no código são refletidas automaticamente no servidor de desenvolvimento

Desenvolvendo com Play

• Uma aplicação web simples usando Play– Estrutura inicial do projeto– Aplicação está OK– Mapeamentos: requisições -> ações dos

controllers– Criar stubs das ações nos controllers– Criar a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

Funcionamento da aplicação

Cliente (WebBrowser) Servidor

HttpRequest

HttpResponse

Roteamento

• Mapeamento:– Requisição Http -> Ação de algum controller

• Se a complexidade aumenta podemos ter uma hierarquia de arquivos de roteamento

routes

AçõesURLsMétodo

Acessar URLs

Controllers

• Classe no pacote controllers• Herdam da classe Controller– Seus métodos são chamados de ações– Devem retornar um Result(HTTP response)

Controller

Controllers

• Verificar mapeamento:– Http request -> ação

• Stubs

/contas

Desenvolvendo com Play

• Uma aplicação web simples usando Play– Estrutura inicial do projeto– Aplicação está OK– Mapeamentos: requisições -> ações dos

controllers– Criar a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

Model

• Construção da suas classes de negócio, para a funcionalidade desejada

• Anotação das classes que serão persistidas

Model

• Classes de entidades– No pacote models– Classes que representam entidades persistidas:• Anotadas• Herdam da classe Model, do Play

Classe conta

Model

• Repositório:• JPA + Play– Herança de model:• save(), delete(), etc.

– Finder• Objeto usado para fazer consultas a base.

RepConta

Models

• Aplicações complexas:– Estrutura complexa– Pode ser organizado em camadas

• Aplicações simples:– apenas classes de persistência Model:• Classe de dados + Repositório

CadastroContas

Controlador

Fachada

Controlador != Controller

• Preocupações diferentes:– Controlador:• Implementar a lógica de negocio usando cadastros• Implementa um seviço

– Controller:• Tratar requisições do usuário• Delegar ao model a execução da lógica de negócio• Atualizar a view(Passive View)

Estrutura do model

Configuração do BD

Configurar o BD

• arquivo de configuração:– Application.conf

• H2:– Banco em memória– Padrão

application.conf

Plugin de evolução do BD

• BD desatualizado:– Servidor de desenvolvimento -> aplicar script SQL

Gerenciar o BD

• Genciar a base H2 atraves do browser– Comando h2-browser

h2-browser

H2 console

H2 console

Desenvolvendo com Play

• Uma aplicação web simples usando Play– Estrutura inicial do projeto– Aplicação está OK– Mapeamentos: requisições -> ações dos

controllers– Criar a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

View

• Templates HTML de resposta:– Lógica de apresentação: • liguagem de templates + HTML

View

• Conveção de nome:– nome.scala.html

• Criação de método de atualização:– views.html.nome.render(parametros)

Forms

• Classe auxiliar que dada um classe basica cria um formulario.

• Simples e muito util em aplicações webs.

Desenvolvendo com Play

• Uma aplicação web simples usando Play– Estrutura inicial do projeto– Aplicação está OK– Mapeamentos: requisições -> ações dos

controllers– Criar a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

Controller

• Ação: – tratam das requisições do usuario– delega ao model a execução da funcionalidade– responde com a a view atualizada

• Implementar os controladores

Validação dos dados

Desenvolvendo com Play

• Uma aplicação web simples usando Play– Estrutura inicial do projeto– Aplicação está OK– Mapeamentos: requisições -> ações dos

controllers– Criar a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

Pronto

Controller

Requisição do cliente

Model View

Requisita o model

Atualiza a view a ser rederizadaView retornada como uma HTTP response

Trata a requisição do cliente

IDE

• Comando “eclipsefy” no console Play• Tem um comando para IntelliJ

eclipsify

Problemas

• Falsas marcações de erros no Controller

Projeto

• Para 2 casos de uso– Modelar como um sistema Web– O model deve ser estruturado com fachada,

controladores, cadastros de negócio e de dados– Usar o Play, Grails ou outro Framework– Mostrar como o MVC foi aplicado– Implementar pelo menos mais um padrão, como

Abstract Factory, Observer, Command, State ...• 1 CRUD• 1 Caso mais complexo

Referências

• Site do Framework: – http://www.playframework.org/

• 1o Capítulo do Livro “Play for Java”– http://www.manning.com/leroux/leroux_meap_c

h01.pdf