Se você deseja conhecer o Grails, a primeira coisa que deverá conhecer BEM consiste em sua estrutura de diretórios. Esta é criada após a execução do comando
grails create-app [nome da sua aplicação]
dentro do diretório [nome da sua aplicação]. A primeira vista, pode parecer um pouco complexa, porém, como veremos neste post, é incrívelmente simples de ser compreendida e, uma vez assimilada, tornará nítido o conceito de programação baseada em convenções.
(Neste post não irei explicar o que são os arquivos expostos na imagem (serão assunto para um post futuro), sendo assim, foquemo-nos apenas ao que interessa: os diretórios)
Comecemos portanto pelos diretórios presentes na raiz de nossa aplicação:
grails-app: contém o que realmente interesssa, ou seja, a sua aplicação. 99% das classes que você venha a criar para a mesma deverão estar contidas em um dos subdiretórios presentes nesta entrada.
grails-app/conf: armazena arquivos de configuração da sua aplicação, como por exemplo acesso a banco de dados e a configuração do Spring ou Hibernate.
grails-app/controllers: todas as suas classes de controle serão incluídas neste diretório
grails-app/domain: as classes de domínio de sua aplicação (aquelas que serão persistidas no banco de dados e contém sua lógica de negócio)
grails-app/i18n: recursos de internacionalização para a sua aplicação
grails-app/services: armazena os “serviços” de sua aplicação. O que vêm a ser um serviço? Grails incentiva o desenvolvedor a não incluir toda a sua lógica de negócios nas classes de domínio (por favor, não as inclua (nem um pedacinho!) nos controladores). As classes de serviço são gerenciadas pelo Spring, e são responsáveis portanto por encapsular determinados aspectos da lógica de negócios de sua aplicação.
grails-app/taglib: armazena todas as tags customizadas criadas usando o Grails (mais sobre isto em um post futuro, aonde você ficará boquiaberto com a facilidade que Grails nos trás nesta tarefa)
grails-app/utils: neste diretório serão armazenadas classes utilitárias para sua aplicação, como por exemplo codecs de strings e classes utilizadas por alguns plugins oferecidos para o Grails.
grails-app/views: contém todos os arquivos GSP responsáveis por renderizar as páginas utilizadas pela sua aplicação. Cada classe de domínio possui um diretório equivalente dentro deste diretório. Suponha por exemplo que exista uma classe de domínio chamada Livro. Seguindo as convenções do Grails, deverá existir também (caso esta classe venha a necessitar de uma camada de visualização) um diretório chamado grails-app/views/livro.
lib: neste diretório deverão ser incluídos todos os arquivos .jar referentes a bibliotecas terceirizadas que você queira utilizar, como por exemplo drivers JDBC, bibliotecas para geração de PDF e, principalmente, seu código legado, caso seja necessário reaproveitá-lo.
scripts: caso seja necessária a criação de novos scripts para facilitar o desenvolvimento da sua aplicação, os mesmos deverão ser incluídos neste diretório. Todos os scripts usados pelo Grails são desenvolvidos usando GANT (Groovy Ant), que consiste em uma camada de abstração para o Ant feita em Groovy.
src: No diretório src você pode armazenar código fonte a ser reaproveitado por sua apliação. Normalmente, consiste em código fonte legado que não se encaixa fácilmente na estrutura de diretórios proposta pelo Grails. Dentro deste diretório há dois outros: groovy e java, aonde é possível armazenar código fonte das duas linguagens.
test: armazena todos os seus testes unitários, funcionais e de integração
web-app: O conteúdo estático de sua aplicação, como por exemplo arquivos html, imagens, css, etc.
O GANT não uma versão do Ant. É uma abstração em cima do Ant para a definição de tasks programaticamente usando groovy. Mais ou menos como o GORM está para o hibernate.
Outra pasta importantíssima que faltou foi plugins, mas como acho que no 1.1+ a pasta vai ser movida para HOME/.grails acho que tudo bem. ;)
@Raphael Miranda, Olá Raphael. Tem razão a respeito do GANT, já consertei o post.
Com relação ao diretório plugins, não o citei porque não é sempre que aparece e, dado se tratar de um guia para quem está iniciando, optei por mencioná-la posteriormente em um post futuro sobre o assunto.
Valeu pela dica!
Muito obrigado Kicolobo (agora acertei) por este post também!
foi bem util, eu estava desenvolvendo um código que aprendi numa screencast, e agora vi a importância do diretório service ^^, antes estava deixando algumas coisas no controller!
obg mais uma vez!!
@tgmarinho
Precisando Thiago, to ai!
Realmente de grande ajuda.
vlw