Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Do Ze

Opensanca
July 14, 2016
13

Do Ze

Opensanca

July 14, 2016
Tweet

More Decks by Opensanca

Transcript

  1. Apresentação Pessoal Nome: William Formação Graduando em Analise e Desenvolvimento

    de Sistemas – IFSP Campus São Carlos Experiência Profissional Estágio em desenvolvimento de software UFSCAR(2013-2014) Analista de Sistemas Expert Project (2014) Analista Programador jr – Virgos Ip Solutions(2015) Analista de Sistemas – ImaxGames (2015 - ?) 2
  2. Recordar é viver... Desenvolvimento do sistema Open BR Track Sistema

    para monitoramento e gerenciamento de entregas de produtos JSF + EJB + JPA Organização muito dependente do desenvolvedor, pode variar de projeto para projeto Muitos arquivos XML (configurações) 3
  3. Recordar é viver... Desenvolvimento do sistema Open BR Track Muito

    código repetido e desnecessário Muito burocrático Código confuso Dificuldade de mudanças Baixa produtividade 4
  4. Dificuldade de mudanças...  Alterações nas entidades gerava:  Mudanças

    no banco de dados  Mudança nos DAOs (Data Access Object)  Mudanças nos serviços (fachadas)  Mudanças nos Managed Beans  Mudanças nos XHTML 8
  5. Um Pouco de História  O desenvolvimento do Grails começou

    em julho de 2005, inspirado no Ruby on Rails  Originalmente o nome era Groovy on Rails  Versão 0.1 saiu em 29 de março de 2006  Versão 1.0 saiu em 04 de fevereiro de 2008  Atualmente a versão mais recente é a 3.1.6  Projeto é patrocinado e liderado pela OCI , mas ja foi patrocinado pela pivotal 10
  6. Groovy e Grails  Linguagem de programação dinâmica que roda

    na JVM  Framework fullstack (pilha completa) para desenvolvimento de aplicações web 11
  7. O que é a linguagem Groovy?  Linguagem de programação

    dinâmica que roda na JVM  2º Linguagem padrão da plataforma Java  Pode ser usada como linguagem de scripts  Suporta sintaxe da linguagem Java  Favorece legibilidade  Menos codigo para produzir mais 12
  8. Groovy - declaracao de variaveis //Como em Java, C#, etc.

    int x Integer y = 1 Double z //Ou sem tipo explícito def x, y = 1 def z 13
  9. Groovy – Estruturas de repetição //FOR Como em Java, C#

    for(def i=1; i <= 10; i++){ println i } //WHILE Como em Java, C# def i=1 while(i<=10){ println i I++ } //Range (1..10).each{ i -> println i } 14
  10. Groovy – Listas/Mapas declaração l def numeros = [1..10] ou

    def numeros = [] l numeros.each{ l println it l //it é uma palavra reservada que l //faz referência a cada elemento da lista l } l def estados = ["SP":"São Paulo","RJ":"Rio de Janeiro","MG":"Minas Gerais"] l estados.each{ sigla, nome -> l println sigla + " - " + nome l } 15
  11. Groovy – Datas l //declarando data l def data =

    new Date() l //Capturando o próximo dia l def data = new Date() l println data+1 l //Capturando o dia anterior l def data = new Date() l println data-1 l //Convertendo String em Data l def data = Date.parse('dd/MM/yyyy', '31/12/1980') 16
  12. Princípios do Grails  Convenção em vez de Configuração –

    Ao invés de fazer toda a configuração explicitamente em arquivos XML, o nome e a localização dos arquivos indicam sua função. Sempre que possível siga as convenções.  DRY (Don’t Repeat Yourself) – No Grails existe um conjunto organizado de artefatos disponíveis para os desenvolvedores, além de geradores de código fonte. Além disso, o Grails favorece a adoção do DRY nos projetos.  MVC (Model-View-Controller) – Padrão arquitetural de software que se baseia na divisão do software em camadas com funções bem definidas. 20
  13. Model-View-Controller 21 Modelo Visão Controlador Responsável pela organização dos dados

    e pelas regras do negócio Responsável pela organização dos dados e pelas regras do negócio Responsável apresentação e visualização dos dados Responsável apresentação e visualização dos dados Responsável pela integração entre as camadas de Visão e Modelo Responsável pela integração entre as camadas de Visão e Modelo
  14. Model-View-Controller na Web 22 Modelo Visão Controlador Browser 1. O

    usuário envia um pedido de url 2. O controlador pede dados ao Modelo 3. O modelo devolve os dados pedidos 4. O controlador seleciona a visão e fornece os dados 5. A visão selecionada é devolvida ao controlador 6. O controlador devolve a visão como resposta para o browser
  15. Scripts Grails, por exemplo para configuração Estrutura de um projeto

    Grails 23 Classes de domínio e Serviços fazem parte do Modelo Controllers fazem parte do Controlador Views e Taglibs fazem parte do Controlador Codecs e classes específicas do Grails “Dicionários” para internacionalizaç ão Arquivos de Configuração Código Java! Código Groovy “genérico” Testes unitários Testes de integração
  16. Estrutura de um projeto Grails 24 Lista de Plugins utilizados

    Tudo que está no classpath, como bibliotecas Nome e versão da aplicação, versão do Grails Recursos como CSV, javascripts e imagens WEB-INF, META-INF Grails Wrapper
  17. Classes de Domínio Representam as entidades de negócio Tem atributos

    próprios que são mapeados e armazenados em um banco de dados, normalmente relacional Podem apresentar alguns tipos de relacionamento: Herança Dependência 1 para muitos 1 para 1 25
  18. Relacionamentos – HasMany ( 1- N ) 26 class Author

    { String name static hasMany = [books: Book] }
  19. Relacionamentos – BelongsTo ( 1- 1 ) 27 class Book

    { String title static belongsTo = [author: Author] }
  20. Relacionamentos – ManyToMany ( M- N ) 28 class Group

    { static hasMany = [people: Person] } class Person { static belongsTo = Group static hasMany = [groups: Group] }
  21. Controllers (Controladores) Responsáveis por tratar as requisições do usuário (browser)

    com as actions Realizam algum trabalho sobre a requisição (por exemplo chamar uma classe de domínio ou serviço) Escolher o tipo de resposta: Executar outra ação de controller (própria ou não) Renderizar uma visão (GSP) Renderizar informação diretamente 29
  22. Controllers (Controladores) Seguem algumas convenções: O nome das classes deve

    terminar com a palavra Controller Ficam dentro do diretório controllers Tipo padrão é prototype, ou seja, uma instância para cada requisição. É possível mudar o tipo. Métodos públicos são utilizados para tratar os eventos Ação padrão é a index 30
  23. Controller – scaffold dinamico Para Criar um crud basico basta

    colocar o seguinte metodo no controller Static scaffold = true 31
  24. Gerando Controller e Views 33 Métodos HTML permitidos para cada

    action Métodos HTML permitidos para cada action Tipo de transição padrão: Somente leitura Tipo de transição padrão: Somente leitura
  25. Métodos do GORM (Grails' object relational mapping) Substitui o DAO

    (Data Access Object) Vários métodos para busca, atualização, remoção e persistência dos dados Entendendo o Controller 34
  26. Views (Visões)  São arquivos GSP – Aceitam linguagem HTML

    e taglibs do Grails  Ficam dentro do diretório do respectivo controller 35
  27. Services (Serviços) Camada adicional na parte do model para facilitar

    o desacoplamento Convenções: Os nomes das classes terminam com a palavra Service (ex: EdicaoService) São transacionais (é possível configurar) Tipicamente: Acessam as classes de domínio Acessam outros services 37
  28. Services (Serviços) Quando usar: Você precisa centralizar a lógica do

    negócio em uma API de serviços Os casos de uso da aplicação operam em múltiplos objetos de domínio, e operações complexas de negócio no modelo não devem ser misturadas com a lógica do controlador Alguns casos de uso, e processos de negócio são melhor encapsulados fora de um objeto de domínio. Nesse caso, podem ser encapsulados em uma API. The Definitive Guide to Grails 2 - Jeff Scott Brown, Graeme Rocher 38
  29. Services – Usando no Controller 39 Injeção de dependência Injeção

    de dependência Chamada do método Chamada do método
  30. Banco de Dados  Já temos duas classes, controllers, view,

    servisse, testes....  Mas não falamos ainda de banco  Onde estão os dados???  As respostas estão no arquivo Datasource.groovy, no diretório conf 40
  31. Banco de Dados 41 Configurações da Base de Dados (H2)

    Configurações da Base de Dados (H2) Configurações o Hibernate Configurações o Hibernate
  32. Banco de Dados 42 Ambientes específicos para desenvolvimento, testes, e

    produção Ambientes específicos para desenvolvimento, testes, e produção
  33. Banco de Dados 43 E eu posso trocar? PODE!!! Para

    isso, você deve: Informar o driver do banco Configurar a URL Configurar nome de usuário e senha
  34. Plugins 1250 plug-ins (13 de maio de 2016) Todo tipo

    de plugin: Segurança (Spring Security Core, Apache Shiro Integration for Grails) Interface (Kickstart with Bootstrap, Grails Admin Interface, Plugin Platform UI) Persistência de dados (MongoDB GORM, Redis Plugin) Geração de relatórios (Jasper Plugin, Excel Export Plugin) Gerenciamento de processos (Grails Activiti Plugin, camunda Grails Plugin) 47
  35. Plugins Envio de e-mail (Asynchronous Mail Plugin, Provides Mail support

    to a running Grails application) Cache (Cache Plugin, Ehcache Cache Plugin) Agendamento de Jobs (Quartz, Grails Spring Batch Plugin) Testes (Spock Plugin, Spock Functional Plugin, Geb integration for Grails) Buscas (Searchable, ElasticSearch Grails Plugin) Integração com redes sociais (Facebook SDK Plugin, Twitter for Spring Security OAuth plugin) 48
  36. Plugins - Spring Security Core 50% dos usuarios Grails usam

    SpringSecurity como plugin principal para controle de acesso Comandos Basicos: l //Configuracão inicial l S2-quickstart pacote ClasseUser ClasseRole l //Gerar token persistent l grails s2-create-persistent-token <classname> 49
  37. Database Finders-Dinamicos 50 l Cliente.findAllByNomeLike("%João%") l Cliente.findAllByNomeIlike("%João%") l Cliente.findAllByDataNascimentoBetween(new Date()-1,

    new Date()) l Cliente.findAllByIdadeGreaterThanEquals(30) l Cliente.findAllByIdadeNotEqual(20) l Cliente.findAllByIdadeLessThan(50) l Cliente.findAllByNomeInList(["João","José","Juca"]) l Cliente.findAllByDataNascimentoIsNull() l Cliente.findAllByDataNascimentoIsNotNull()
  38. Database CreateCriteria 51 É uma implementação simplificada do Criteria do

    framework Hibernate. É uma ótima solução para consultar dados do banco de dados sem a necessidade de escrever comandos HQL, e permite aninhar critérios de seleção com facilidade. A estrutura básica do createCriteria() é: def lista = Cliente.createCriteria().list{ ilike("nome","%João") order("idade") } //Listar todos os clientes cujo nome comeca com a letra A e B createCriteria() def lista = Prato.createCriteria().list{ or{ ilike("nome","A%") ilike("nome","B%") } }
  39. Database HQL 52 //Listar Todos os Clientes def lista =

    Cliente.executeQuery("select cli from Cliente cli") //listar todos os clientes por ordem decrescente def lista = Cliente.executeQuery("select cli from Cliente cli order by cli.nome desc") //Listar os pratos cujo nome começa com a letra A ou a letra B String hql = "select p from Prato p "+ " where lower(nome) like lower('A%') or lower(nome) like lower('B%')" def lista = Prato.executeQuery(hql)