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