Geradores de código automáticos [fechados]


13

Um dos meus colegas gosta de usar geradores de código automáticos, que criam grandes quantidades de código mal documentado e muito difícil de manter.

O custo do uso de um gerador de código vale o aborrecimento na manutenção, pelo tempo reduzido para a criação?

Respostas:


10

Vamos reformular isso:

O custo de um bom gerador de código automático vale a pena?

Sim.

O custo de um gerador de código automático ruim que cria mais trabalho para todos os outros, mas o autor vale a pena?

Absolutamente não. Não há desculpa para código ruim. Se alguém quiser ser inteligente e usar a geração automática de código, reserve um tempo para garantir que o código gerado seja um bom código. Caso contrário, qual é o sentido disso? Ele está apenas diminuindo o preço e, quando se trata de produção de código, o preço deve parar no desenvolvedor que o escreveu.


16
Eu discordo do seu segundo ponto. O código gerado precisa ser bom o suficiente para que funcione e não crie desempenho / segurança ou outros problemas. Como você nunca deve manter o código gerado manualmente, não importa se não está de acordo com seus padrões de codificação usuais.
Hila

4
Tudo bem para você discordar. No entanto, se você reservar um tempo para criar um gerador de código, por que não reservar um tempo para tornar o código gerado bonito? Uma vez gerado, não sei quem o fez, como foi feito, nem a intenção, a menos que seja tão legível / sustentável quanto todas as outras partes. Às vezes, os geradores existem apenas para criar um ponto de partida, e não o produto final completo.
wheaties

1
Além disso, se a geração do código faz parte da sua compilação (ou seja, é gerada novamente a cada compilação), não faz muito sentido produzir código "bonito". Mas se você deseja gerar o código uma vez e é isso, é uma história diferente.
Dean Harding

5
Hila, você nunca deve manter o código gerado manualmente, mas quando chegar o dia em que você precisar alterá-lo devido a novos requisitos / alterações, será necessário que o código seja claro e compreensível para que você possa fazer as alterações necessárias no gerador com facilidade e, em seguida, gere novamente.
Carson63000

6
O código gerado não precisa ser bonito o suficiente para manutenção, mas precisa ser inteligível o suficiente para depuração e validação.
Huperniketes

23

O código gerado por um gerador nunca deve ser mantido à mão. Se precisar mudar, o gerador e / ou suas configurações devem ser ajustadas e executadas novamente. Considerando isso, não importa se o código resultante é incompreensível e não documentado, desde que o próprio mecanismo de geração seja claro. (Certifique-se de documentar o fato de que o código é gerado, onde o gerador está e como ele funciona.)

Analogia: enquanto o processador do meu computador está sempre executando o código da máquina, não preciso saber nada sobre isso, desde que eu saiba como criar esse código da máquina usando linguagem e compilador de alto nível. Ouvi dizer que o GCC às vezes produz código de máquina abaixo da média, mas quem se importa, desde que funcione perfeitamente. As camadas de abstração do banco de dados produzem SQL para operar com o mecanismo de banco de dados, mas quem se importa com a aparência desse SQL, desde que a camada de abstração esteja clara e funcione?

Quando usados ​​corretamente, os geradores de código podem definitivamente economizar não apenas a criação, mas também o custo de manutenção.


4
O problema então se torna: apenas uma pessoa tem a ferramenta, mais ninguém, e, portanto, precisa manter o código manualmente.
Mumbles

Isso está passando a bola. Como desenvolvedores de software, nosso negócio é código - não importa como o produzimos.
Steven Evers

12
@ David, se apenas uma pessoa tiver a ferramenta, você não deve usá-la em um projeto que envolva mais de uma pessoa.
Matt Olenik

2
@ Matt, exatamente. Os geradores fazem parte do projeto (comparável aos scripts de construção) e devem ser armazenados no controle de versão ou em um repositório central semelhante.
Joonas Pulakka

2
@SnOrfus: Acho que nosso negócio é produzir produtos que as pessoas estejam dispostas a usar e comprar. É daí que vem o nosso salário. Código é apenas um meio.
Joonas Pulakka 4/10/10

6

Um gerador de código é um tipo de compilador. Você não se preocupa com o quão bonita é a saída do compilador, apenas trabalha com o código-fonte. Usá-lo e modificar manualmente a saída é muitas vezes mais difícil do que simplesmente escrevê-la do zero, de uma forma compreensível por humanos, e significa que você não pode usar o gerador de código novamente sem muito trabalho, pois você precisará aplicar o mesmas alterações com o mesmo código incompreensível com precisão.

Portanto, eles podem ficar bem se fizerem parte do processo de compilação e documentados como tal. A entrada para o gerador é, então, o código-fonte, e o que quer que ele produza resultados intermediários, para não ser necessário mexer.

No entanto, se alguém está usando um para produzir código incompreensível que deve ser usado como fonte, então ele está produzindo código incorreto. Não importa se a pessoa está produzindo código ruim mecanicamente ou manualmente, ainda é um código ruim e você ainda tem um problema de qualidade.

Portanto, você precisa tratar isso como qualquer outro desenvolvedor, cortando os cantos e escrevendo códigos incorretos. Não sei como você lida com isso na sua loja.


3

A partir dos comentários em outras respostas, parece que você está perguntando sobre os padrões da equipe e não sobre os próprios geradores de código.

Uma ferramenta de geração de código deve ser incluída no projeto e deve (quando apropriado) fazer parte do processo de criação. Um exemplo seria em nossa equipe que utilizamos o Subsonic 2.2, que geramos classes a partir dos objetos de banco de dados na compilação.

O exe que faz isso é verificado no SVN como parte do projeto para que um novo membro da equipe possa obter o novo projeto do svn e construí-lo imediatamente sem precisar descobrir de onde todas essas classes de banco de dados vieram (neste exemplo, nós nem inclua o código gerado no svn).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.