java mais ágil que nunca no desenvolvimento web

Download Java mais ágil que nunca no desenvolvimento Web

If you can't read please download the document

Upload: bruno-borges

Post on 16-Apr-2017

2.409 views

Category:

Technology


2 download

TRANSCRIPT

Java mais gil que nunca no desenvolvimento Web

Apache Wicket + MongoDB + Scala

Quem sou eu?

twitter: @brunoborges
[email protected]

Desenvolvimento Web gil?

Para a galera dessas tecnologias, sim

Para os web designers.... no!

Designers vs Developers

Tipo do Projeto

Pixel PerfectAplicao do jeito que o cliente desenhou

Um Web DesignerOu uma equipe exclusiva de designers

PrototipaoCliente envolvido no processo

Alteraes no prottipo refletir na aplicao

O que ajuda o designer?

Isso ajuda tambm... e MUITO

PREVIEW

NO

BROWSER

Fazemos isso?

public class LoginAction
extends ActionSupport {

public void login() {
Connection c = getConnection();
Statement st = c.createStatement();
ResultSet rs = st.executeQuery(SELECT * FROM USUARIO WHERE ID = +usuario);
setAutenticado(rs.hasNext());
}

}

StrutsConsulta JDBC ???NO

Separao de Camadas

Interface do Usurio

Esta camada tambm pode ser quebrada em subcamadasUma para o web designer

Outra para o web developer

preciso uma melhor marcao HTML


Nome:

Isto o que o
Web Designer fazIsto o que o
usurio do siterecebe

E se...

Pudssemos ter uma

tecnologia que no altera

(quase nada)

o que o Web Designer fez?


Nome:


Nome:

Tipos de Marcao XHTML

Imperativa (JSF, Struts, SpringMVC, Play!, Ruby on Rails, PHP, Python ...)





O ser humano no
nasceu para fazer
isso :-(E nenhum navegador
nasceu para
renderizar isso

Tipos de Marcao XHTML

Declarativa (Wicket, Tapestry e poucos outros)





Bom para o
Web Designer e
navegador!

Apache Wicket

Apache Wicket

Framework Web

HTML puroNo utiliza Taglibs

Java puroDesenvolvimento similar ao Swing

Orientado a Componentes

Java + HTML



msg de sistema

+

new Label(msg, We Develop);

=

We Develop

HTML prottipo

/MyHomePage.html


Apache Wicket


msg dinamica


Nome: Email:





Marcao no intrusiva

/MyHomePage.html


Apache Wicket


msg dinamica


Nome: Email:





Toda a lgica da UI: em Java

/MyHomePage.java

public class MyHomePage extends WebPage {

public HomePage() {
add(new Label(msg, We Develop!));

Form form = new Form(form) {
public void onSubmit() {
servico.salvar(getModelObject());
}
};
form.add(new TextField(nome));
form.add(new TextField(email));
add(form);
}
}

Puro Java e
Orientao a Objetos.
Sem mgica

O mnimo de configurao


wicket.app

org.apache.wicket.protocol.http.WicketFilter


applicationClassName
code.MyApplication



/MyApplication.java

package code;
public class MyApplication extends WebApplication {

public Class getHomePage() {
return MyHomePage.class;
}
}

Extensvel

Gmap2 gmap = new Gmap2(map);
page.add(gmap);


Google Maps

Ajax

Suporte nativo

Diversos componentes prontosAlguns com Fallback

Incluso dinmica de CSS e JavaScript

Console independente de navegador, para debug

Ajax

// HTML
contagem

incrementar



// JAVA
int counter = 0;

Label counterLabel = new Label(counter);
add(counterLabel);

add(new AjaxLink(counterLink) {
public vond onClick(AjaxRequestTarget target) {
counter++;
counterLabel.setModelObject(counter);
target.addComponent(counterLabel);
}
});

Scala

Scala

Linguagem Orientada a ObjetosE no fundo, Java

Linguagem funcional

Estaticamente tipada



extensvelPermite facilmente desenvolver DSLs

var foo = 8foo = bar

Type mismatch;
found: String(bar)
required: Int

Scala: antes, em Java

/MyHomePage.java

public class MyHomePage extends WebPage {

public HomePage() {
add(new Label(msg, We Develop!));

Form form = new Form(form) {
public void onSubmit() {
servico.salvar(getModelObject());
}
};
form.add(new TextField(nome));
form.add(new TextField(email));
add(form);
}
}

Scala: depois, em Scala

/MyHomePage.scala

class MyHomePage extends WebPage {

add(new Label(msg, We Develop!))

object form extends Form(form) {
add(new TextField(nome))
add(new TextField(email))

override def onSubmit() = {
servico.salvar(getModelObject())
}
}
add(form)
}

Scala: Uma DSL para Wicket

/MyHomePage.scala

class MyHomePage extends WebPage with DSLWicket {

label(msg, We Develop!))

object form extends Form(form) with DSLWicket {
textField[String](nome))
textField[String](email))

override def onSubmit() = {
servico.salvar(getModelObject())
}
}
add(form)
}

Scala: Funes

So representadas como valores tambm, como objetos

val func = () {
println(functional programming)
}

def chamaFuncao(paramFuncao: () Unit) ={
paramFuncao()
}

chamaFuncao(func)

Scala: Construes inteligentes

A linguagem rica em construes inteligentes

val lista1a9 = 1 to 9 toList
lista1a9.foreach(i print(i))

for (i lista1a9) {
print(i)
}

val strings = new Array[String](3)
strings(0) = Hello
strings(1) = World
strings(3) = !

Scala: Construes inteligentes

val listaA = List(1, 2)
val listaB = List(3, 4)

val listaC = listaA :: listaB

// listaC uma nova List

val listaD = listaC :: 5
print(listaD)
// saida: List(1,2,3,4,5)

Scala: Construes inteligentes

val map = new HashMap[Int, String]
treasureMap += 1 "Numero 1"
treasureMap += 2 "Numero 2"
treasureMap += 3 "Numero 3"

println(map(2))
// '2' a key, no o indice
// saida: Numero 2

val romanos = Map(1 "I", 2 "II", 3 "III", 4 "IV", 5 "V")
println(romanNumeral(4))
// saida: IV

MongoDB

MongoDB

Banco de dados NoSQL

Orientado a documentosBSON // representado no estilo JSON

Auto-sharding Escala automaticamente de forma horizontal

Map/Reduce

GridFSArmazenamento de arquivos de qualquer tamanho

Operaes Atmicas

MongoDB

O que significa NoSQL?No relacional

Foco em escalabilidade

Fcil modelagem e mudana de dadosNo exige definio de tabelas ou schemas

Sem sintaxe SQLmas tem gente construindo SQL para NoSQL

Sem joins e sem transaes complexas o que permite escalabilidade horizontal

Principal Vantagem

NOPRECISAMODELAGEMPRVIALeia-se: diagramas de tabelas, joins, constraints e o escambal

MongoDB

Quem utiliza?The New York Times

Business Insider

Foursquare

Sourceforge

Craigslist

Eletronic Arts

MongoDB: como por dentro?

$ mongo dbTeste
MongoDB shell version: 1.8.2
connecting to: dbTeste

> db.colecao.find();
> db.colecao.save({foo: "bar"});
> db.colecao.save({bar: "foo"});
> db.colecao.find();
{
"_id": ObjectId(4e4d11f9cc937416b0004469"),
"foo": "bar"
}
{"_id": ObjectId("4e4d128ecc937416b000446a"),
"bar": "foo"
}

MongoDB

Driver Java

E um pacote para ScalaCasbah

val newObj = MongoDBObject("foo" "bar", "x" "y", "pie" 3.14, "spam" "eggs")// newObj: com.mongodb.casbah.Imports.DBObject// { "foo" : "bar" , "x" : "y" , "pie" : 3.14 , "spam" : "eggs"}

Juntando os 3

Apache Wicket
+ Scala
+ MongoDB
_________________

Projeto Gamboa

www.gamboa-project.org

Obrigado

Bruno [email protected]

www.cursodewicket.com

9/10/11

Click to edit the outline text formatSecond Outline LevelThird Outline LevelFourth Outline LevelFifth Outline LevelSixth Outline Level

Click to edit the outline text formatSecond Outline LevelThird Outline LevelFourth Outline LevelFifth Outline LevelSixth Outline Level