20 de jan. de 2010

Spring Roo, a filosofia por trás do código...

Dae gurizada..

Esse post está guardado há uns 2 meses, então não reparem as datas... ;)

No último dia 09/Novembro fui no TDC, onde tive a satisfação de assistir a palestra do próprio Rod Johnson, sobre spring Roo.


Eu e o Rod. Os carecas.. hehehe



Na verdade o painel sobre Spring Roo não estava previsto para o evento de Floripa. Como o Chris Schalk da Google não pode entrar no Brasil, o Rod Johnson improvisou a apresentação. Valeu muito a pena!!!

Informações sobre o The Developer Conference - TDC:
Resumo do evento: tdc-2009-floripa-eu-fui


Então.. vamos lá...

O que é Spring Roo?

Spring Roo é um gerador de código, que faz isso de forma rápida e fácil (segundo a documentação...rsrsrs)

"A missão do Spring Roo é melhorar a produtivadade do desenvolvimento de aplicações java sem comprometer a engenharia, integridade ou flexibilidade." Ben Alex (Líder do projeto)

Para quem já mexeu com o Grails, o Spring Roo é bem semelhante. Até porque, o Spring Roo surgiu após a compra do G2One, dona do Grails, pela SpringSource.

O Spring Roo é feito para os "desenvolvedores desenvolverem". Parece estranho, mas o Roo é feito para quem gosta de escrever código. Esqueça os Wizards!!!!

Assim como o Grails, o Spring Roo fica "observando" o código que é escrito. Ele faz o"round-trip" do código se adaptando ao código alterado.

Quando você rodar o Roo o que vai acontecer??? Abrir um SHELL. Dessa forma através de linha de comando você executa a criação do seu projeto.



Historinha...
No painel do TDC o Rod Johson comentou que "roo" é um apelido para os cangurus. Roo também significa mola, já fazendo analogia a produtividade que ele proporciona.



Filosofia

O conceito do Roo é que o código java é do do Desenvolvedor. O Roo fica nos bastidores, observando o que é desenvolvido e auxiliando em alguns pontos.
A documentação define o Roo como "um pequeno gênio que fica setando em segundo plano fazendo coisas que eu não preciso me preocupar". Pequeno porquê a versão atual tem menos de 3mb, que lhe permite continuar com o modelo atual de desenvovimento de aplicações java com Spring e você não necessita adaptar novas tecnologias.

"Precisa alterar alguma coisa no código? Faça e deixe que o Roo se vire!"

Roo não fica no seu caminho, se você quiser reescrever alguma coisa faça, ele irá se adaptar e ajustar os arquivos relevantes.



A IDE



Roo

Está claro nos posts sobre o Roo que o objetivo é trazer produtividade ao desenvolvimento de aplicações java. Não tem como relacionar produtividade sem usabilidade quando falamos em ferramentas.

A grande preocupação é focar na tarefa do desenvolvedor. Por isso o Roo é um "shell", não um conjunto de wizards. Dessa forma, aproveita o "tab-compliting", funcionalidade que o desenvolvedor já está a costumado a utilizar.

O Roo não tem o objetivo de eliminar as IDEs, pelo contrário. Ele etende que a utilização de IDEs é importante, por isso continua executando o round-trip, enquanto os desenvolvedores trabalham com as IDEs normais. Não é necessário nenhum plugin para utilizaro Roo junto com IDEs. Apesar de o Spring Tool Suite ter integração com o Roo, viabilizado que o comandos sejam executados a partir do Eclipse.


Ajuda Contextualizada
Além do tab compliting foi desenvolvido um sistema de de dicas, que apresentam sugestões de o que deve ser feito, de acordo com as ações tomadas pelo usuário.

Exemplo da utilização da palavra "hint".

Na imagem acima, após digitar a plavra "hint", o Roo apresenta como proceder para cirar um projeto. Na figura abaixo, após ter criado o projeto e digitado "hint", o Roo indica que deve configurar um Data Provider para o projeto.




Um projetinho rápido

Bom.. vou colocar aqui os comandos que utilizei para criar um projeto e duas classes com relacionamento.

mkdir roo-sample
Digitei "hint" e o roo me dises que precisava criar um projeto. Segue:

project --topLevelPackage com.simundi.roosample
O hint me disse que precisava configurar o dataprovider. Usando o TAB compliting eu cheguei ao seginte comando
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
OBS: eu digitei "persistence" e apertei TAB, o roo me ajudou a chegar ao resto do comando.

Agora, o hint me disse que precisava criar novas entidades. Basta escrever "ent" e usar o TAB.

entity --name ~Pessoa
OBS: o "~" que coloque antes do nome da classe indica que a classe será cirada no pacote padrão. Neste caso o pacote padrão é "com.simundi.roosample".

Adicionando um novo campo na classe, utilizei o seguinte comando:

field string --fieldName nome
OBS: se digitar "--" e apertar TAB, o roo vai mostrar todas as opções para o comando.
Exemplo: digite "field string --fieldName nome --" e aparte TAB.

Agora vou só colocar os comandos que executei:
field string --fieldName nome --sizeMax 50 --notNull
entity --name ~Endereco
field number --fieldName numero --type integer
field string --fieldName complemento
Roo no Eclipse

Um dos princípios do Roo é ser independente de plataforma. Então, importei o proejto criado no Eclipse Ganymede. Esse eclpse não tem nenhum plugin da SpringSource, apenas o plugin para o maven.

O Resultado do projeto é o seguinte:





Vou fazer outro post para explicar os arquivos .aj(aspecj), mas para que quiser se adiantar esse post pode sanar dúvidas: http://blog.springsource.com/2009/06/18/roo-part-3/

Em resumo o Roo tem o conceito de SoC(Separation of Concerns). Que separa o comportamento do objetos em pequenas partes. Por isso cada arquivo .aj tem um objetivo. Um é para implementar o comportamento do JavaBean(getters e setters), outro é para implementar os métodos de persistência do objeto( seguindo os princípios do DDD) e por ai vai...


Criar Add-ons
Não existe material sobre como criar add-ons para o Roo. O concelho do Rod é utilizar o Samples-WebFlow como modelo para criação de Add-Ons.

Esses temos perguntei para o Ben Alex pelo Twitter se tinha alguma pretenção utilizar JSF com o Roo. ele me informou que existiou uma frente de JSF no projeto, mas agora está em análise. mas existe um projeto Alpha, para integrar Flex no Roo. Isso vai ser show!!!


Links



Era isso...

Um comentário:

Anônimo disse...

O Rod ta bem mais careca que vc !! KK !!! Parabéns pelo post !. Abraços.