minicurso groovy grails

76
http://www.flickr.com/photos/montreal1976/4502659151 Groovy & Grails Victor Hugo Germano #lambda3

Upload: victor-hugo-germano

Post on 27-Nov-2014

9.680 views

Category:

Technology


2 download

DESCRIPTION

O fato de existirem inúmeras linguagens que rodam na JVM já não é novidade nenhuma, principalmente com o sucesso de Scala e JRuby. Seguindo a linha das principais linguagens do mercado, Groovy apresenta-se como uma ótima alternativa para aqueles que querem tentar uma nova linguagem, mas ainda gostam na sintaxe Java. Ganhando popularidade nos últimos tempos, Groovy é uma linguagem dinâmica inspirada em Python, Ruby e Smalltalk que pode ampliar e muito a produtivade em seu dia-a-dia. Quanto tempo você leva para fazer um site utilizando as principais ferramentas Java? Pois em Grails isso pode ser ainda mais rápido! Inspirado no framework Ruby on Rails, Grails tem ganhado popularidade entre as opções para desenvolvimento web devido ao seu alto grau de integração com a plataforma Java, e adicionando a isso conceitos como interceptors, tag libs, Groovy Servers Pages (GSP), além de uma grande variedade de plugins para facilitar ainda mais o desenvolvimento web.

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