Quando geradores de codigo são realmente necessários?

Pessoal, me ocorreu a seguinte dúvida:
As vezes nos deparamos com a necessidade de um gerador de código, que geralmente é repetitivo e tal. Mas quando, realmente, um gerador é necessário?
Será que uma aplicação melhor planejada resolve? ou será que existem melhores alternativas quanto a geração automática de certos códigos de estrutura já conhecida?

:?: :?: :?: :?:

Acho que geradores de código é tão necessario quanto a preguiça do programador.

acho muito eficientes… se vc aplicalos de forma correta… se vc mesmo criar o seu gerador com sua propria necessidade… o que é realmente uma perca de tempo e fazer manualmente tarefas repetitivas… se vc ver que tem que fazer determinada tarefa repetitiva… ta na hora de implementar um gerador pra fazer isto pra vc… o bom desenvolvedor não é o que trabalha na maquina… e o que faz a maquina trabalhar pra ele… e quanto mais vc tirar vantagem de reaproveitação de codigo, centralização do mesmo e de criar geradores… mais tempo vc economizara… vc pode até levar 3 semanas pra fazer um gerador… porem pode economizar 3 meses com o mesmo…

Porem geradores só são usuais em casos onde teram muitas tarefas repetitivas…

O único gerador de códigos que eu acho necessário é o de Getters / Setters no Eclipse. SOMENTE. E ainda eu mudo alguma coisa, quando preciso.

depende do que cada um necessita. Se você precisa apresentar um produto final num prazo estipulado, essas ferramentas podem te ajudar muito. Se o único usuário do software será você mesmo, não tem porque pensar em usar essas ferramentas.

Bem de quais geradores de código vocÊ fala? Aquelas ferramentas que desenvolve aplicativos e que no final do desenvolvimento você manda a ferramenta gerar o código da aplicação em uma determinada linguagem como é Genexus ou são aquelas extensões que possuem as IDEs como NetBeans, Visual Studio que geram uma parte do código para você?
Ai sim neste caso tem grandes diferenças, ferramentas como geração de código como Genexus eu nunca usuária para desenvolver aplicativos, agora as IDEs como Visual Studio e Netbeans que possuem plugins que geram um parte do código para você concerteza usuárias. Por exemplo no Netbeans quando você esta desenvolvendo aplicativos que utilizam o JPA por exemplo você tem como gerar as classes de entidades para você, ai só fazer as alterações necessárias, isso sim é de grande ajuda agilizando o desenvolvimento.

Pelo jeito vcs escrevem XML usando JDOM ainda criando tag por tag. metodo rudimentar e primitivo quando possuimos uma solução excelente chamada JAXB, trabalhar com Objetos é muito melhor do que trabalhar com Elements e Nodes.

Pra mim quando um gerador, vai suprir minha necessidade tornando meu trabalho menos repetitivo melhor.

Programador bom é programador preguiçoso, pq ele não vai perder tempo reescrevendo código já escrito, um programador desse tipo, vai buscar uma solução que facilite a vida dele, consequentemente escrevendo código mais rápido, por que ele não precisa reescrever 10 linhas repetidas em cada tela, ele passa elas pra uma outra classe e com uma linha pronto, ele só da manutenção em um único lugar.

Não vou ficar aqui falando sobre isso. Mas penso que quando se trabalha em equipe é pode ser necessário usar geradores de códigos, até hoje não vi nada mais prático que a importaçao de tabelas do banco para JPA do netbeans. Ninguem merece ter que criar os comandos SQL e depois ficar horas mapeando e criando tabela a tabela do banco como uma classe para dai sim começar a trabalhar. Não sei vcs, mas aqui nós costumamos ter prazos, e quando antes terminarmos melhor para a gente, melhor para o cliente.

Não sejam repetitivos e mantenham simples :slight_smile:

[]'s

Geradores são úteis para rotinas repetidas, e nisso eu me foquei em fazer um gerador que me atenda ao requisito de minimizar o tempo fazendo algo que sei que não “muda”, ou ele faz todo o processo básico e depois vou moldando o código conforme a minha necessidade. Fiz da seguinte forma, ele lê uma pasta por xmls pré definidos, no caso o meu projeto deve ter obrigatóriamente o arquivo project.xml, ele lê esse XML, e desde então cria a estrutura básica do projeto. Para mim está resolvendo um mucado, eu “salvo” um tempo bom nele. Vejam um exemplo:

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="SCAObras" fullname="Sistema de Consulta de Auditoras de XXX" author="Inocêncio T. de Oliveira">
	<build process="clean-build" model="true" business="true" test="true" verbose="true"/>
	<package root="br.com.projeto.|name|"
		     model="br.com.projeto.|name|.dados"
			 business="br.com.projeto.|name|.negocio"
			 test="br.com.projeto.|name|.test" test-folder="test"
			 backing-bean="br.com.projeto.|name|.web.bean"/>
    <entities>
	    <process name="Cliente" />
    </entities>
</project>

Depois ele procura arquivos modelos xml em uma pasta chamada models, para cada modelo xml definido ele cria um estrutura de entidade, uma estrutura básica de classe de négocio, classe de teste e depois (next release) uma estrutura de CRUD web (se for o caso).

Ou seja, desde que você tenha o controle dele e saiba o que está fazendo, para algumas coisas pode ser de fato útil e eficiente, mas nunca espere que geradores de código irão resolver a sua vida definitividade.

[quote=Grinvon]Geradores são úteis para rotinas repetidas, e nisso eu me foquei em fazer um gerador que me atenda ao requisito de minimizar o tempo fazendo algo que sei que não “muda”, ou ele faz todo o processo básico e depois vou moldando o código conforme a minha necessidade. Fiz da seguinte forma, ele lê uma pasta por xmls pré definidos, no caso o meu projeto deve ter obrigatóriamente o arquivo project.xml, ele lê esse XML, e desde então cria a estrutura básica do projeto. Para mim está resolvendo um mucado, eu “salvo” um tempo bom nele. Vejam um exemplo:

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="SCAObras" fullname="Sistema de Consulta de Auditoras de XXX" author="Inocêncio T. de Oliveira">
	<build process="clean-build" model="true" business="true" test="true" verbose="true"/>
	<package root="br.com.projeto.|name|"
		     model="br.com.projeto.|name|.dados"
			 business="br.com.projeto.|name|.negocio"
			 test="br.com.projeto.|name|.test" test-folder="test"
			 backing-bean="br.com.projeto.|name|.web.bean"/>
    <entities>
	    <process name="Cliente" />
    </entities>
</project>

Depois ele procura arquivos modelos xml em uma pasta chamada models, para cada modelo xml definido ele cria um estrutura de entidade, uma estrutura básica de classe de négocio, classe de teste e depois (next release) uma estrutura de CRUD web (se for o caso).

Ou seja, desde que você tenha o controle dele e saiba o que está fazendo, para algumas coisas pode ser de fato útil e eficiente, mas nunca espere que geradores de código irão resolver a sua vida definitividade.[/quote]

Bem interessante o seu… eu tbm fiz um parecido… nele vc configura a “pagina” e ele gera todo o crud simples pra vc… digamos em um CRUD pessoa… vamos limitar este crud em somento o atributo nome… vc primeiro mapeia a tabela pessoa com o hibernate e gera sua classe pessoa pelo gerador do plug-in para o hibernate… depois vc cria um arquivo: “pessoa.xml” dai vc coloca os campos que vc quer digamos:

<manter tipo="grid">
<input-text name="nome" label="Nome da Pessoa" not-null="true" />
</manter>
 <exclusao>
<read-label name="nome" label="Nome da Pessoa" />
</exclusao>

dai vc manda gerar o bagulho todo indicando onde seu arquivo pessoa.xml ta
ele pega seu arquivo pessoa.xml e cria a jsp de inclusão, a jsp com grid de pesquisa com os filtros (no caso nome), a jsp para alterar e a jsp para excluir a pessoa com os campos (neste caso nome) para o usuario verificar se é esta mesma a pessoa que ele quer excluir… alem das jsps ele gera toda a estrutura de classes mvc: PessoaAction, PessoaDTO, PessoaDAO…

ou seja para vc fazer um crud simples para cadastrar, pesquisar com filtro uma pessoa, alterar e exclui-la vc só precisa mapeala com o hibernate a tabela pessoa no seu banco e criar um arquivo pessoa.xml mandar o gerador executar este arquivo e fim de papo… vc tem um CRUD simples com: inclusão, alteração, pesquisa e remoção da sua entidade…
porem este gerador so funciona para cruds simples… não da pra por muita frescura… mas ele é sempre util… mesmo nos cruds complexo pois eu mando gerar toda estrutura simples de jsps e classes do meu crud e depois altero as classes para torna-las mais complexas e atender a necessidade do negocio… com isto tenho um ganho consideravel em produtividade…

Quando eu tiver tempo quero aposentar o plug-in de mapeamento do hibernate do netbeans e criar meu proprio… assim mato ate o pessoa.xml e faço dai a leitura direto da tabela pessoa e crio toda a estrutura para o crud pessoa por exemplo… so deixando o pessoa.xml para casos onde preciso customizar filtros, campos, etc… em um crud simples ele criaria em 5min… dai e so criar tda a estrutura e modificar o que vc quiser… o bom do meu gerador e que vc pode configurar a nomeclatura das classes e atributos, e incluir comentarios… dai ele monta tudo bonitinho, com comentario e nomeclatura correta…

++

[quote=kikostyle]Pessoal, me ocorreu a seguinte dúvida:
As vezes nos deparamos com a necessidade de um gerador de código, que geralmente é repetitivo e tal. Mas quando, realmente, um gerador é necessário?
Será que uma aplicação melhor planejada resolve? ou será que existem melhores alternativas quanto a geração automática de certos códigos de estrutura já conhecida?

:?: :?: :?: :?:[/quote]

A solução para o problema da repetição de código é planejamento, entretanto se o objetivo é escrever menos código o melhor é usar uma linguagem declarativa e de alto nivel (claro que não estou falando de XML. :twisted: )

[quote=kikostyle]Pessoal, me ocorreu a seguinte dúvida:
As vezes nos deparamos com a necessidade de um gerador de código, que geralmente é repetitivo e tal. Mas quando, realmente, um gerador é necessário?
Será que uma aplicação melhor planejada resolve? ou será que existem melhores alternativas quanto a geração automática de certos códigos de estrutura já conhecida?
[/quote]

Uma estrutura de codigo conhecida é um template. O Eclipse dá suporte a isso. vc pode criar seus templates.
Agora, gerar vários arquivos fonte é outra historia. No tempo do Xdoclet isso era usado,mas por deficiencia do stat-of-the-art de então.
HOje com anotações isso é quase não necessário. Contudo, mesmo com anotações é possivel usar isso e exsite até um pre-processador de anotações no java 6 e seguintes. Mas o uso para gerar outros fontes é raro.

Quando usar um gerador de codigo ?
Nunca.

Se vc usa um algo está errado o seu processo de trabalho ou nas tecnologias que escolheu. É preciso uma razão bem forte como a que deu origem ao Xdoclet.

Sim, ficou até semelhante, você cria uns inputs e ele processa a geração, retirando toda a parte mecânica que faríamo se não fosse o caso.

O meu além do arquivo project.xml (para configurações gerais do projeto), eu tenho arquivos parecido com o seu como Pessoa.xml (modelo para criar entidade, bs, testes e futuramente web para o modelo de Pessoa) e também outros recursos dos quais estou pensando e analisando.

Porém é um projeto extra, meu chefe nem sabe da existência dele e nem tenho intenções de falar disso para ele.

Sim, e deve ser assim, pois você cria um crud simples e modela ele depois de criado conforme a necessidade do modelo usado, pelo menos ajuda muito, porque convenhamos que é um saco fazer coisas repetidas, tem até um artigo que fala que os bons programadores são preguiçosos.

"