Implementação MVC
Pedro Antonino
Agenda
• MVC
• Desenvolvendo com Play
MVC
Separação das
preocupações:
- Interação do
usuário
- Apresentação
- Lógica de
negocios
Controller
Model
View
MVC Passivo
Controllador
Http response
Atualiza view
MVC Passivo
HttpRequest
Browser
Servidor
HttpResponse
View
MVC Passivo
HttpRequest
Browser
Servidor
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
HttpRequest
Cliente
(WebBrowser)
Servidor
HttpResponse
Roteamento
• Mapeamento:
– Requisição Http -> Ação de algum controller
• Se a complexidade aumenta podemos ter uma
hierarquia de arquivos de roteamento
routes
Método
URLs
Ações
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
Model
Requisição
do cliente
Trata a requisição do cliente
Requisita o model
View retornada como
uma HTTP response
Atualiza a view a ser rederizada
View
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
Download

Aula9-1-AulaImplementacaoMVC