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 Atualiza view Http response
MVC Passivo Browser HttpRequest Servidor HttpResponse View
MVC Passivo Browser HttpRequest 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 Struts Play 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
Pilha do 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
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
Diretório App Assets: Controllers Models (Não cria automaticamente) Javascript Stylesheets Controllers Models (Não cria automaticamente) Views
Diretório Conf Application.conf Routes
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 Ações Método URLs
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: Finder save(), delete(), etc. Finder Objeto usado para fazer consultas a base.
RepConta
Models Aplicações complexas: Aplicações simples: 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: H2: Application.conf 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: Criação de método de atualização: 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: Implementar os controladores 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 View 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
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: 1o Capítulo do Livro “Play for Java” http://www.playframework.org/ 1o Capítulo do Livro “Play for Java” http://www.manning.com/leroux/leroux_meap_ch01.pdf