Archivo del sitio

Frameworks: la Media Naranja de la Generación de Código

Podemos definir un Framework (FW) como una estructura software con funcionalidades genéricas las cuales pueden ser adaptadas o enriquecidas para obtener un aplicativo final.

Comúnmente pueden ser confundidos con las librerías, pero se trata de un enfoque totalmente diferente. He aquí las principales características que definen esta diferencia:

  • La inversión de control. El flujo de control lo define el FW y no el aplicativo que usa sus servicios. Esto también es conocido como el principio de Hollywood: “no nos llames, nosotros te llamaremos”.
  • Extensibilidad. Algunas funcionalidades del FW no están “cerradas” como sucede en las librerías, al contrario están diseñadas para ser particularizadas según el problema particular que deban resolver.
  • Comportamiento predeterminado. los FWs poseen un comportamiento global predeterminado, comportamiento que define el flujo de control. Como se ha visto antes, la extensión es lo que permite adaptar el comportamiento global al problema particular que cada aplicativo requiera.
Los frameworks son la base de las arquitecturas plug-in y de los sistemas enfocados a ecosistemas de desarrollo (facebook, twitter, amazon…), pero sobretodo son la arquitectura perfecta para hacer de base al código generado.

Técnicamente, dependiendo del lenguaje de programación que usemos, habrá varias formas de implementarlo. En lenguajes que lo permitan lo mejor es apoyarse en clases abstractas, clases parciales, delegados y tipos genéricos. En caso contrario se pueden usar otras estrategias como: intérpretes, funciones intermedias, tipo patrón visitor, que resuelvan la llamada y otros.

Ventajas en la generación de código
Estas son las características que aconsejan su uso:

  • Extensible. Permiten realizar el trabajo en dos partes, lo cual facilita la definición del generador de código.
  • Estructurado. Diseñar por un lado la parte genérica y en el generador la particular, permite tener una arquitectura mejor estructurada.
  • Seguridad. Permite tener físicamente separados el código manual y el código generado, lo cual evita perdidas de código.
  • Reutilizable. Una vez definido un FW podemos utilizarle en diferentes proyectos, facilitando nuevamente el desarrollo del generador.
  • Legibilidad. La separación de lo genérico y lo particular facilita el entendimiento del código.
Conclusión
Cuando se aborda la generación de código se suele pensar que se va a generar el sistema al 100%. Una vez que se profundiza en ello se ve que es complejo además de ser un error de diseño y una distribución de trabajo desequilibrada.

Para conseguir un buen diseño arquitectónico y una buena distribución del trabajo los frameworks se muestran como la media naranja ideal para nuestro sistemas generados.

Por último, es aconsejable que el código generado tenga también una estructura de framework, esto nos permite poder implementar aquellas particularidades que no convenga automatizar y a su vez permite que nuestros sistemas puedan ser extendidos por un ecosistema de desarrolladores.
 

Ver todos los posts Teórico.