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

71
Implementação MVC Pedro Antonino

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

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

Implementação MVC

Pedro Antonino

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

Agenda

• MVC• Desenvolvendo com Play

Page 3: 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

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

MVC Passivo

ControlladorAtualiza view

Http response

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

MVC Passivo

Browser Servidor

HttpRequest

HttpResponse

View

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

MVC Passivo

Browser Servidor

HttpRequest

HttpResponse

View

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

Framework

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

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

Play Framework

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

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

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

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

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

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

Exemplo: RealizarDOC

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

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

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

Criação da estrutura inicial

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

da aplicação

Page 13: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 14: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

Estrutura de um projeto Play

Page 15: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com 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

Page 16: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 17: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

Servidor

• Executado com o comando run do console Play

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

Page 18: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 19: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com 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

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

Funcionamento da aplicação

Cliente (WebBrowser) Servidor

HttpRequest

HttpResponse

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

Roteamento

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

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

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

routes

AçõesURLsMétodo

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

Acessar URLs

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

Controllers

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

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

Controller

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

Controllers

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

• Stubs

Page 27: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 28: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

/contas

Page 29: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com 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 a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

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

Model

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

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

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

Model

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

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

Classe conta

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

Model

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

– Finder• Objeto usado para fazer consultas a base.

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

RepConta

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

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

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

CadastroContas

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

Controlador

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

Fachada

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

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)

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

Estrutura do model

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

Configuração do BD

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

Configurar o BD

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

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

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

application.conf

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

Plugin de evolução do BD

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

Page 45: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 46: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

Gerenciar o BD

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

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

h2-browser

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

H2 console

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

H2 console

Page 50: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com 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 a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

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

View

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

Page 52: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 53: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 54: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

View

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

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

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

Forms

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

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

Page 56: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 57: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com 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 a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

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

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

Page 59: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 60: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 61: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 62: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 63: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.
Page 64: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com Play.

Validação dos dados

Page 65: Implementação MVC Pedro Antonino. Agenda MVC Desenvolvendo com 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 a lógica de negócio no pacote Model– Criar as view para apresentação dos dados– Implementar os stubs dos controllers

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

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

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

IDE

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

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

eclipsify

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

Problemas

• Falsas marcações de erros no Controller

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

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

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

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