¿Qué Es El Código Ravioli?

- - publicado en programación etiquetado como antipatrones, código ravioli, código spaghetti | Comentarios

Leyendo un documento sobre Erlang, en el que introduce el concepto de módulos parametrizados, encuentro un aviso que dice (traducido): cuidado con el código Ravioli. Por lo que llego a preguntarme… ¿qué es el código Ravioli?

Hasta ahora, yo conocía el código Spaguetti, que se basaba en la programación con saltos entre las líneas del código, vamos, el uso de la sentencia goto, que quedó obsoleta con la programación estructurada. Pero al adentrarnos en la programación estructurada, surge otro anti-patrón a tener en cuenta, que es el código Ravioli.

El código Ravioli se basa en que el código se refactoriza en demasiados trozos pequeños del mismo que llegan a ser difíciles o imposibles de seguir. Este caso se da también en la programación orientada a objetos, donde el origen del código ya no está disperso entre funciones o procedimientos, sino también entre clases y paquetes, haciendo que el código sea difícilmente trazable.

Los consejos que podemos seguir para no caer en este tipo de programación son:

  • No ir más allá de 7 +/- 2 trozos de código. Si el código que estamos trazando (propio nuestro) tiene que ahondar en más de 7 (o 9 métodos/funciones/…) entonces quizás comience a caer en la definición de Ravioli.
  • Programación por parejas: si uno de los dos se comienza a perder, es mala señal.
  • Refactorización Sin Piedad: refactorizar intentando hacer común lo específico de modo que si hay dos funciones que hagan cosas similares, se unifiquen, y si hay dos objetos también similares, igual.

…y sobre todo, mucho sentido común. Intenta escribir cosas lógicas, que llegando a un momento dado, olvidando que lo has escrito tú, al verlo, consideres que esa es la ubicación lógica donde lo encontraría cualquier persona que viese de nuevas el código.

Con todo eso, el código Ravioli no será más un problema para tus códigos ;-)

Manuel Rubio

Manuel Rubio

Fundador de AltenWald

Comments