it-swarm-es.com

Generadores de códigos automáticos

A uno de mis colegas le gusta usar generadores de código automáticos, que crean grandes cantidades de código que está mal documentado y es muy difícil de mantener.

¿Vale la pena el costo de usar un generador de código por la molestia de mantenimiento, por el tiempo reducido de creación?

13
Mumbles

Reformulemos eso:

¿Vale la pena el costo de un buen generador de código automático?

Si.

¿Vale la pena el costo de un generador de código automático deficiente que crea más trabajo para todos los demás, pero su autor?

Absolutamente no. No hay excusa para un código deficiente. Si alguien quiere ser inteligente y usar la generación automática de código, entonces debe tomarse el tiempo para asegurarse de que el código generado sea un buen código. De lo contrario, ¿de qué sirve? Solo está empujando la pelota por el camino y cuando se trata de la producción de código, la responsabilidad debe detenerse en el desarrollador que lo escribió.

10
wheaties

El código generado por un generador nunca debe mantenerse a mano. Si es necesario cambiarlo, entonces el generador y/o su configuración deben ajustarse y ejecutarse nuevamente. Teniendo en cuenta eso, no importa si el código resultante es incomprensible e indocumentado, siempre que el mecanismo de generación en sí sea claro como el cristal. (Asegúrese de documentar el hecho de que se genera el código y dónde está el generador y cómo funciona).

Analogía: si bien el procesador de mi computadora siempre está ejecutando código de máquina, no necesito saber nada al respecto siempre que sepa cómo crear ese código de máquina utilizando un lenguaje de alto nivel y un compilador. He oído que GCC a veces produce un código de máquina insatisfactorio, pero a quién le importa, siempre que funcione a la perfección. Las capas de abstracción de la base de datos producen SQL para operar con el motor de base de datos, pero ¿a quién le importa cómo se ve ese SQL, siempre que la capa de abstracción sea clara y funcione?

Cuando se usan correctamente, los generadores de códigos definitivamente pueden ahorrar no solo la creación, sino también los costos de mantenimiento.

23
Joonas Pulakka

Un generador de código es un tipo de compilador. No te preocupes por lo bonita que sea la salida del compilador, solo trabajas con el código fuente. Usarlo y luego modificar manualmente la salida es a menudo más difícil que escribirlo desde cero en una forma comprensible para los humanos, y significa que no puede usar el generador de código nuevamente sin mucho trabajo, ya que tendrá que aplicar el mismos cambios al mismo código incomprensible con precisión.

Por lo tanto, pueden estar bien si son parte del proceso de compilación y se documentan como tales. La entrada al generador es entonces el código fuente, y lo que sea que produzca son resultados intermedios, no se debe alterar.

Sin embargo, si alguien está usando uno para producir un código incomprensible que se supone que debe usarse como fuente, entonces esa persona está produciendo un código incorrecto. No importa si la persona está produciendo un código incorrecto de forma mecánica o manual, sigue siendo un código incorrecto y todavía tiene un problema de calidad.

Por lo tanto, debe tratar esto como cualquier otro desarrollador que toma atajos y escribe código incorrecto. No sé cómo maneja eso en su tienda.

6
David Thornley

A partir de los comentarios sobre otras respuestas, parece que está preguntando sobre los estándares del equipo en lugar de los generadores de código en sí.

Se debe incluir una herramienta de generación de código en el proyecto y debe (cuando corresponda) ser parte del proceso de construcción. Un ejemplo sería que en nuestro equipo hacemos uso de Subsonic 2.2, que hemos generado clases a partir de los objetos de la base de datos en la construcción.

El exe que hace esto se registra en SVN como parte del proyecto para que un nuevo miembro del equipo pueda obtener el nuevo proyecto de svn y construirlo inmediatamente sin tener que averiguar de dónde vienen todas estas clases de base de datos (en este ejemplo ni siquiera incluya el código generado en svn).

3