Download pdf - Minicurso groovy grails

Transcript
Page 1: Minicurso groovy grails

http://www.flickr.com/photos/montreal1976/4502659151

Groovy&

GrailsVictor Hugo Germano

#lambda3

Page 2: Minicurso groovy grails

“Quando você programa em Groovy, de várias formas você está escrevendo

um tipo especial de Java.”

-Dierk KönigGroovy in Action

Page 3: Minicurso groovy grails

GroovyLinguagem Dinâmica

para JVMMeta Object Protocol

bytcodeSuporta Tipagem

Estática

Integração transparente com Java

Sintaxe Similar

Page 4: Minicurso groovy grails

file.groovy file.java

The Java Virtual Machine

bytecode bytecode

Page 6: Minicurso groovy grails

Uma classe em Javapublic class HelloWorld { private String name; public String getName() { return name; } public void setName(String message) { this.name = message; } public String message() { return "Hello World of "+this.name; } public static void main(String[] args) { HelloWorld hello = new HelloWorld(); hello.setName("Grooooooovy"); System.out.println(hello.message()); }}

Page 7: Minicurso groovy grails

class HelloWorld { String name def message() { "Hello World of $name" } }def hello = new HelloWorld(name:"Grooovy")println hello.message()

A mesma classeem Groovy

Page 8: Minicurso groovy grails

Conceitos Básicos

http://www.flickr.com/photos/noideas/2323222802/

Page 9: Minicurso groovy grails

Conceitos Básicos

Se você já programa em Java, você já programa em Groovy!

http://www.flickr.com/photos/jeyp/4149695639

Page 10: Minicurso groovy grails

Conceitos Básicosclass Pessoa { String nome int idade}

new Pessoa ( nome: “Zé”, idade: 7)

void setIdade(idade) {this.idade = idade - 4

}

Page 11: Minicurso groovy grails

Conceitos Básicosdef today = new Date()def tomorrow = today + 1

assert today.before(tomorrow)assert tomorrow.after(today)

Page 12: Minicurso groovy grails

Operator Overloadinga + b a.plus(b)

a - b a.minus(b)

a / b a.multiply(b)

a % b a.modulo(b)

a ** b a.power(b)

a & b a.and(b)

a[b] a.getAt(b)

Page 13: Minicurso groovy grails

Operator Overloadingclass Pedido {

def total def plus(Pedido pedido) { def result = this.total + pedido.total new Pedido(total:result) } }

def pedido1 = new Pedido(total: 10) def pedido2 = new Pedido(total: 50)

def pedido3 = pedido1 + pedido2

println pedido3.total

Page 14: Minicurso groovy grails

Special Operatos

def addr = user?.address?.toUppercase()

Elvis operatordef displayName = user.name ? user.name : “No one”def displayName = user.name ?: “No one”

Operador Seguro de Navegação

Page 15: Minicurso groovy grails

Groovy Strings

http://www.flickr.com/photos/elianarei/3904613032/

Page 16: Minicurso groovy grails

Groovy Stringspublic String displayString() { return “<u>” + title + “</u> by ” +

authorName + “, (“ + numberOfPages + “ pages)”;

}

InterpolaçãoString displayString() { “<u>$title</u> by $authorName, ($numberOfPages pages)”;}

Page 17: Minicurso groovy grails

Groovy Strings

String displayMultiLineString() { “““<u>$title</ul> by $authorName, ($numberOfPages pages)”””;}

Page 18: Minicurso groovy grails

Collections

http://www.flickr.com/photos/wisekris/183438282/

Page 19: Minicurso groovy grails

Collectionsdef frutas = [“Banana” , “Pera”, “Maçã” ]

def countries = [ br: “Brazil”, us: “United States”, ie: “Ireland” ]

println countries.br

Page 20: Minicurso groovy grails

Collections

countries.each {println it

}

for (c in countries) {println c

}

Page 21: Minicurso groovy grails

Collections

def list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]def sublist = list[0..5]

def square = { it * 2 }[1, 2, 3].collect(square)== [2, 4, 6]

Page 22: Minicurso groovy grails

Collectionsprivate List books; public List<Book> findByISBN(String isbnCode) { Book result = null; if(books != null && isbnCode != null) { for (Book book : books) { if(book != null && isbnCode.equals(book.getISBN()) ) { result = book; break; } } } return result; }

Page 23: Minicurso groovy grails

List books; Book findByISBN(String isbnCode){ books?.find({it?.isbn == isbnCode}); }

Collections

List books; List findAllByAuthor(String authorName){ books?.findAll({

it?.author == authorName})

}

Page 24: Minicurso groovy grails

Groovy Truth

Page 25: Minicurso groovy grails

Groovy Truthdef a = truedef a = falseassert aassert !b

Page 26: Minicurso groovy grails

Groovy Truthdef numbers = [] assert numbers // false

def numbers = [1, 2, 3]assert numbers // trueColeções Vazias!

Page 27: Minicurso groovy grails

Groovy Truthassert ‘Verdadeiro’ // true

assert ‘’ // false

Strings!

Page 28: Minicurso groovy grails

Groovy Truthassert null // falseassert 0 // false

assert (new Object()) // trueassert 1 // true

Objetos e Números!

Page 30: Minicurso groovy grails

Closures { Bloco de Código

ouPointeiro para um Método }

Page 31: Minicurso groovy grails

def refParaClosure ={ parametros ->

//Código..}

refParaClosure(p1, p2...)

Closures

Page 32: Minicurso groovy grails

Let’s play!http://www.flickr.com/photos/rogerss1/3232663848

Page 33: Minicurso groovy grails

Arquivos

Page 34: Minicurso groovy grails

Em Java!!!!

Page 35: Minicurso groovy grails

import java.io.*;class FileRead {   public static void main(String args[])  {      try{    // Open the file that is the first     // command line parameter    FileInputStream fstream = new FileInputStream("textfile.txt");    // Get the object of DataInputStream    DataInputStream in = new DataInputStream(fstream);   BufferedReader br = new BufferedReader(new InputStreamReader(in));    String strLine;    //Read File Line By Line    while ((strLine = br.readLine()) != null)   {      // Print the content on the console      System.out.println (strLine);    }    //Close the input stream    in.close();    }catch (Exception e){//Catch exception if any      System.err.println("Error: " + e.getMessage());    }  }}

Page 36: Minicurso groovy grails

def file = new File("textfile.txt") file.eachLine { line ->

println line}

moonbug.org

Page 37: Minicurso groovy grails

Arquivosdef file = new File("textfile.txt")file << ‘Escrevendo no arquivo’

def dir = new File("c:\")dir.eachFile {println it

}

Page 38: Minicurso groovy grails

Duck Typing

http://www.flickr.com/photos/catdonmit/2326033244/

Page 39: Minicurso groovy grails

Duck Typing

void cuidar(Pato pato) {pato.quack()pato.andar()pato.comer(new Comida(tipo: “peixe”))

}

Page 40: Minicurso groovy grails

Duck Typingvoid fakePato = [

andar: { },quack: { },comer: { Comida c -> }

]

cuidar(fakePato as Pato)

Page 41: Minicurso groovy grails

Metaprogramação

Page 42: Minicurso groovy grails

M.O.P.Meta Object Protocol

Criando código gerador de código

Page 43: Minicurso groovy grails

MetaprogramaçãoMetaClass

ExpandoClass

getProperty / setProperty

invokeMethod / invokeStaticMethod

methodMissing

Page 44: Minicurso groovy grails

"Florianópolis".totalDeLetras()

String.metaclass { totalDeLetras = { delegate.size() }}

Metaprogramação

Page 45: Minicurso groovy grails

import groovy.xml.MarkupBuilder

def mkp = new MarkupBuilder()mkp.html {

head {title "Minicurso G&G"

}body {

div(class:"container") { p "Lambda3 & Globalcode going dynamic!" } }}

println mkp

Builders

Page 46: Minicurso groovy grails

AST Transformation

http://www.flickr.com/photos/ttdesign/343167590

Page 47: Minicurso groovy grails

AST Transformation

public class T { public static final T instance = new T(); private T() {}

public T getInstance() { (...) }}

Metaprogramação em tempo de compilação

@Singleton class T { }

Page 48: Minicurso groovy grails

AST Transformationclass Pessoa {

String nome@DelegateEndereco endereco

}

class Endereco {String ruaString cidadeString pais

}

def pessoa = new Pessoa()pessoa.rua = “Avenida Paulista”pessoa.cidade = “Sao Paulo”pessoa.pais = “Brasil”

Page 49: Minicurso groovy grails

Can you feel it?

http://www.flickr.com/photos/jerica_chingcuangco/3659719599

Page 50: Minicurso groovy grails

GRAILS

Page 51: Minicurso groovy grails

Outro Framework Web?!

Struts

JSF

Tapestry

Cocoon

Maverick

Sombrero

VRaptor

Wicket

OpenXava

JSPWidget

Calyxo

Turbine

WebOnSwing

SwingWeb

http://www.flickr.com/photos/nwardez/3089933582/in/photostream/

Page 52: Minicurso groovy grails

JSF

Tapestry

Cocoon

Maverick

Sombrero

VRaptor

Wicket

OpenXavaJSPWidget

Calyxo

Turbine

WebOnSwing

SwingWebStruts

http://www.itexto.net/devkico/?p=224

JEE1999

Java Web Development

Page 53: Minicurso groovy grails

Java para Web

Aquijás

JEE1999

http://www.itexto.net/devkico/?p=224

GerenciarComplexidade

Hibernate

Spring

Java Web Development

Page 54: Minicurso groovy grails

http://www.itexto.net/devkico/?p=224

Convenções

Full Stack

Scaffolding

Extensibilidade

Page 55: Minicurso groovy grails

Migrar tudo para Rails?

Page 56: Minicurso groovy grails

Flexibilidade

Experiência

Page 57: Minicurso groovy grails

Ambiente Completo (“Full Stack”)

Groovy é a linguagem base

Convenções!!

Extensibilidade

GRAILShttp://grails.org

Page 58: Minicurso groovy grails

Java Enterprise Edition (JEE) SiteMesh

The Java LanguageThe Java

Development Kit (JDK)

Hibernate

Gro

ovy

Spring

The Java Virtual Machine

Grails

Full Stack

Page 59: Minicurso groovy grails

Show me some code!!

http://www.flickr.com/photos/outime/4250568447

Page 60: Minicurso groovy grails

grails create-app library

grails create-domain-class library.Book

grails create-controller library.Book

grails run-app

grails generate-all library.Book

Page 61: Minicurso groovy grails

Forma & Conteúdo

Page 62: Minicurso groovy grails

Configuraçãoenvironments { development { dataSource { dbCreate = "create-drop" url = "jdbc:hsqldb:mem:devDB" } } test { dataSource { dbCreate = "update" url = "jdbc:hsqldb:mem:testDb" } } production { dataSource { dbCreate = "update" url = "jdbc:hsqldb:file:prodDb;shutdown=true" } }}

Page 63: Minicurso groovy grails

Modelagem de Domínio

Active Record pattern

Dynamic Finders

Validations

Hibernate Criterias

GROMGroovy Relational Object Mapping

Page 64: Minicurso groovy grails

“Pense em Servlets, só que melhores!”

Interceptors

Request Handling

Negociação de Conteúdo

Response / rendering

Data Binding

Controllers

Page 65: Minicurso groovy grails

Parecido com JSPs e ASP

HTML + GSP tags + Taglibs

Embedded Groovy Code

MAS NÃO FAÇA!

Layouts & Templates

Views

Page 66: Minicurso groovy grails

URL Encoding

Similar ao Routes do Rails

Validations

URL Mapping

Fácil e simples!

Page 67: Minicurso groovy grails

Guargam Regras de Negócio

Diferenciados por Escopo

Service Layer

Transacionais por padrão

Dependency Injection

Page 68: Minicurso groovy grails

Testing

http://www.flickr.com/photos/busyprinting/4671731838

Page 69: Minicurso groovy grails

Plugins

Page 71: Minicurso groovy grails
Page 72: Minicurso groovy grails

Comunidadehttp://www.flickr.com/photos/badwsky/48435218/

Page 73: Minicurso groovy grails

http://grailsbrasil.com/

http://grails.org

http://groovy.codehaus.org

Grails: um guia rápido e indireto

http://github.com/grails/grails-core

Comunidade

Page 74: Minicurso groovy grails

Tá, e daí?

Quem usa de Verdade?

Page 75: Minicurso groovy grails

http://www.wired.com/

http://grails.org/Testimonials

http://www.sky.com/

http://iiea.com http://cmrf.org

Quem usa de Verdade?

Page 76: Minicurso groovy grails

Obrigado!

twitter.com/victorhg

Use it! Share it!Remix it!

www.lambda3.com.br


Recommended