Implementação MVC Pedro Antonino
Dec 30, 2015
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