23 abril 2007

Wicket! ... Hein?

Muitos dos meus amigos estranharam ao pronunciar essa palavra, Wicket. E até concordo que é estranha, mas apesar do nome, que agora mudou para... Apache Wicket, acredito que a credibilidade só de ouvir o nome aumentará consideravelmente.

O que é o Wicket?

Resumindo: é tudo o que queríamos que um framework Web fosse! :D Pode parecer um exagero, mas depois de desenvolver algumas telas, vocês verão que não estou mentindo aqui. É realmente divertido, rápido e prático, desenvolver aplicativos Web 2.0 com ele. Tão fácil quanto desenhar tela Swing no Matisse! O framework tem alguns conceitos parecidos com o Tapestry, então quem é familiar com este (também mantido na Apache ), vai pegar rápido a idéia.

É parecido com o Struts/JSF?

Graças a Deus... não!! Trabalhei com Struts durante 2 anos e meio, e recentemente me arrisquei a usar JSF para uma ferramenta interna, e minha conclusão? Struts == JSF = true; Ou seja, se eu já não gostava de Struts, JSF definitivamente não me agrada muito. Apesar disso, essas duas tecnologias são fortes e devem ser respeitadas. Agora, quanto ao Wicket, devo dizer que ele preenche lacunas que antes Struts/JSF nos deixavam extremamente irritados.

Conhecem o termo SOP? Não, não digitei errado SOAP. Acontece que desenvolver aplicativos Web com Struts/JSF, a gente acaba entrando numa metodologia chamada String Oriented Programming. Onde temos que localizar num arquivo xml o retorno de um método, para saber para onde vai aquele maldito... return "success";. Não apenas isso, mas em muitos outros casos como bind de componentes da página, atributos e campos, com o que você está codificando em Java.

Então, o que ganho?

Um desenvolvimento prático e 99,9% separando o que é código dinâmico e o que é código estático (leia-se: Java, HTML, JavaScript). Essa é apenas uma das inúmeras vantagens que se obtém utilizando Wicket para desenvolver aplicações Web. Mas de início, comento aqui esta vantagem.

O seu designer terá total liberdade para mexer no design, layout e estrutura (no caso da estrutura, existem limites, claro), sem ferrar com o código dinâmico, pois este fica em um arquivo separado. Que tipo de arquivo é esse? Adivinha: .java! Sim, para cada página existe uma classe Java para controlar os componentes dinâmicos e estado que esta terá durante o fluxo do site. Isso dá ao designer, preview direto no browser, sem aquelas tags malucas de Struts/JSF ou Velocity, que detonam com o Dreamweaver, Nvu e outros WYSIWYG. Tudo isso graças a um HTML limpo de tags. É possível desenvolver um website, utilizando o protótipo que o cliente enviou, fazendo algo em torno de 5% a 15% de alterações no código HTML, e mantendo-o totalmente funcional direto no browser.


Vamos ver um exemplo de uma página Wicket (aquele infernal Hello World):


<html>

<head><title>Hello Wicket</title></head>

<body>

<span wicket:id="usuario">Bruno Borges</span>

</body>

</html>


E aqui, a classe Java colocando um valor diferente no componente usuario:


public class UsuarioPage extends WebPage {

public UsuarioPage() {

add(new Label("usuario", "Nissim Miojo"));

}

}


Abrindo o arquivo UsuarioPage.html temos um preview puro de uma página estática com o conteúdo Bruno Borges. Agora, se executarmos através do framework Wicket, o conteúdo Nissim Miojo substituirá o valor de protótipo do componente usuário. No que isso é bom? Manter um protótipo funcional e facilitar que o designer faça alterações sem ferrar com o código! :D

E o que mais?

Tem muito mais! Mas agora está tarde, e vou dormir. Quando me inspirar outra vez, posto mais coisas!


[]'s!!
miojo

11 comentários:

Unknown disse...

Miojo é um camarada gente fina. Nerd ao extremo. Não tem sigla em termos de computação que ele não saiba. nem vou comentar a quantidade de tecnologias que esse guri manja. Mas o incrível é que além de Nerd adora uma balada. Volta pra Ilha Brunão e Summa de Sampa. hauauhahahua. Abraço meu velho.

Sergio Oliveira Jr. disse...

Usando uma tag JSP acho que vc pode fazer isso tb, por exemplo.

<mtw:out value="username">Sergio</mtw:out>

estaticamente vai mostrar Sergio. Dinamicamente vai mostrar o valor de username, não?

O problema do WICKET é que ele é outro paradigma. Esquece Action-based. Alguns vão querer mudar o paradigma, mas acredito que muitas pessoas ainda vão preferir ficar no action-based. Sei lá... bom post!!! me deixou pensando...

Faz uma coisa para me convencer miojo. Pega os exemplos do Wicket e compara com os Exemplos do Mentawai, mais ou menos como eu fiz com o Mentawai x Struts2 (http://forum.mentaframework.org/posts/list/1112.page)

Bruno Borges disse...

tão sérgio... com certeza wicket eh outro paradigma... a verdade eh que o paradigma action-based hoje em dia nao eh mais tao produtivo (na minha opiniao).

assim que me inspirar outra vez, faço uma comparacao sim! :)

PS: mtw:out nao dá preview bunitinho no browser nem no dreamweaver :D

[]'s!

PS.2: parabens pelo mentawaii...

Dalton Camargo disse...

Struts != JSF, ainda mais o WW2 (Struts2).
Wicket? Hm, qual empresa que vai querer usar isso? Onde esta teu fluxo de navegacao? Terei que criar uma maldita classe pra cada tela??
Voce quer alterar os valores do teu componente sequer tendo que codificar seu HTML? Use JSF, com ele voce consegue fazer tudo isso que teu wicket ta fazendo (EU tambem odeio JSF, mas estou me colocando na posicao de arquiteto de uma multinacional que com certeza, aprecia muito mais um codigo bem documentado e com uma legibilidade, do que ficar apostando em novas tecnologias e paradigmas :) )

Cheers

Anônimo disse...

Você deu o incentivo de que eu precisava pra procurar saber um pouco mais sobre o Wicket! Até então, a única coisa que eu sabia a respeito do Wicket era aquela coisa do Wicket = Tapestry-complexo, e não sabia de ninguém que tinha "virado fã" dele!

Eu curto bastante o Tapestry, principalmente pela capacidade de integração do trabalho entre designers e programadores (assim como o ocorre com o Wicket, como tu já disse), o que em um projeto de médio/grande porte é algo fundamental. Então, acho que esse framework irá me agradar bastante! :D

Aproveitando, quem quiser conhecer um pouco mais sobre o Tapestry, eu coloquei alguns tutoriais no JavaFree e no meu blog.

[]s!

Anônimo disse...

Me diga uma coisa:
Com o Wicket, você não estará colocando código HTML dentro do .java? Como vc faria um loop para gerar linhas dinamicas dentro de uma tabela?

[]z

Bruno Borges disse...

Bernardo, meu próximo post será sobre isso, aguarde! :)

Unknown disse...

Muito bom o teu post... legal o frame, mas me fez pensar tb (po isso é contagioso) em que tb nada adianta o cara fazer exemplos e aplicações pequenas com um frame desse que surge pois o mercado ainda não carece de profisisonais... por isso não deixo de pensar no JSF agora como uma meta de aprendizado para depois sim ter mais tempo para, como vc, desbravar esse "mundão véio sem porrrrteira" da internet e experimentar essas "cosas" novas :P

Muito legal teu blob, parabéns vou passar a visitar-te mais vezes!

Um grande abraço.

Anônimo disse...

Cara, acabei de testar aqui o mtw:out. Coloquei num arquivo teste.html e abri direto no browser (FireFox 1.5.0.11) e exibiu Sergio, como esperado.

Ou seja, essa vantagem do Wicket não é realmente uma vantagem, pois se consegue a mesma coisa com tags JSP.

:-P

Anônimo disse...

Ok !!!! Caiu a ficha aqui:

mtw:input vai ferrar o browser.

Mas:

input wicket:id

não vai!

Entendi! (Pelo menos sou justo né?)

Bregaida disse...

Bom JSF é component basead assim como o Wicket... Struts 1 e 2 são Action Basead, tem diferenças, oq vc pode falar de JSF pra Wicket são dos arquivos XML, mas acabaram na empresa adotando esse framework então vamos ver se é mesmo tão melhor do que JSF como vc disse.

Parabéns pelo Post, vai ser mto útil.

Contato

Email:bruno.borges(at)gmail.com

LinkedIn: www.linkedin.com/in/brunocborges
Twitter: www.twitter.com/brunoborges
Comprei e Não Vou
Rio de Janeiro, RJ Brasil
Oracle
São Paulo, SP Brasil