duduromeroa.com

Revisión bibliográfica

Patrones de diseño en software: una revisión bibliográfica para Javascript


Por Eduardo Romero | Guayaquil, Ecuador

www.duduromeroa.com, animación, lector, gif



#patrones, #diseño, #lenguajesProgramación, #Javascript

Puedes hallar reseñas de otros temas en programación en este vínculo.



Patrones de diseño en creación de software

Para Osmani (2023, p. 22) "Los patrones de diseño proporcionan un vocabulario común para estructurar el código, lo que facilita su comprensión. Ayudan a mejorar la calidad de esta conexión con otros desarrolladores."

En otras palabras, los patrones de diseño son estructuras de código ya aceptados y siempre (o casi siempre) usados por profesionales del software. Los patrones de diseño agrupan buenas prácticas para codificar y permitir un software mantenible a largo plazo y por más de un solo desarrollador.

Christopher Alexander, Ishikawa y Silverstein: la inspiración para el diseño de software

¿Cómo llegó el concepto de patrones de diseño en el ámbito del software? En la década de 1990 y con la masificación de los computadores personales muchos desarrolladores estadounidenses vieron la necesidad de estandarizar su producción. Su inspiración fue los conceptos del arquitecto austríaco Christopher Alexander (1936-2022) y su libro Un lenguaje de patrones (junto con Ishikawa y Silverstein, 1977, Oxford Press).

En esa obra los autores aconsejan prácticas arquitectónicas (e interesantes justificaciones) de cómo construir puentes, parqueaderos, o diseñar pisos o entradas de museos. Por ejemplo: "(...) es preciso que las paradas [de buses] sean fáciles de reconocer, agradables y rodeadas de la suficiente actividad como para que nos sintamos seguros y a gusto. Sin embargo, las paradas suelen ser deprimentes porque están aisladas."

El aporte de Alexander, Ishikawa y Silverstein a la producción de software

Siendo arquitectos profesionales ellos deseaban crear "un lenguaje común de patrones" que solucione problemas a los arquitectos orientados al bien común. Definieron patrón (hermosamente) de esta forma: "Cada patrón describe un problema que se plantea una y otra vez en nuestro entorno, y luego explica el núcleo de la solución a ese problema de tal manera que usted pueda utilizar esa solución más de un millón de veces sin necesidad de repetirla nunca exactamente."

"Cada patrón describe un problema (...), y luego explica una [potencial solución] a ese problema, y usted puede usar esa solución más de un millón de veces sin necesidad de repetirla nunca exactamente."


Por lo tanto, basados en un grupo de arquitectos idealistas deseosos de hacer la vida menos complicada a otros profesionales, podemos definir a los patrones de diseño como plantillas de soluciones (reusables) ya comprobadas contra algunos potenciales o comunes desafíos y errores al crear software, muchas veces independiente del lenguaje que se use.

El aporte de Gamma, Helm, Johnson y Vlissides hasta el día de hoy

Posteriormente, en 1995 (coincidiendo con el inicio de la Web) los autores Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides publicaron la versión para programadores en su libro Design Patterns: Elements of Reusable Object-Oriented Software. Siendo acogido al día de hoy como una biblia de buenas prácticas para el desarrollo de software.

Los patrones de diseño en creación de software: ¿son código mejorado o solo conceptos que luego aplicamos en código?

Ambos, código y concepto intervienen en la presentación de una solución como lo es un diseño de patrón ya probado. Pero mucho más importante es decir que los patrones de diseño son (primero) estructuras de ideas que solucionan problemas comunes en creación de software.

Volvamos al arquitecto Alexander (y sus colegas) y su propuesta del año 1977. Sus ideas de bien-hacer-arquitectura no eran solo métodos mecánicos (de coger pala y tierra) para construir algo. También daba criterios de mejoras en cuanto a la convivencia social, el respeto a las personas y, por supuesto, para el ahorro de tiempo y de esfuerzo.

Por ejemplo, en uno de sus capítulos aconsejaba no construir edificios medianos de más de cinco plantas de altura porque "Con tres o cuatro plantas uno todavía puede bajar cómodamente a la calle por su propio pie y, desde la ventana, sentirse parte integrante del escenario callejero (...) Por encima de las cuatro plantas estas conexiones se rompen (...) y la conexión con el suelo y con el tejido urbano se debilita" (Alexander, Ishikawa y Silverstein, 1977, p. 126-127).

Por lo tanto, los patrones de diseño para crear software también son criterios de buen hacer, de hacer lo probadamente correcto facilitando la mejora constante cuando el código es comprensible y ampliable.

Evaluación de la utilidad de patrones de diseño

Como ya vimos, desde mediados de 1990 la comunidad de desarrolladores detectó problemas y aportó con soluciones estándar mediante los primeros patrones de diseño, normalmente aplicados para lenguajes ya populares como Java y Javascript (publicados en 1995).

Según Osmani (2023), un patrón de diseño debe presentar muchas de estas condiciones:

  • Da solución posible dentro de un desafío bien contextualizado, no principios rígidos ni estrategias absolutas.
  • No siempre da una solución obvia, completa o directa.
  • Su potencial solución ya ha sido comprobada o testeada por muchos profesionales. No especula en si funciona o no.
  • La aplicación de la solución podría explicar estructuras más intrincadas.
  • Debe dar algunos varios ejemplos que demuestren que el patrón funciona / soluciona un desafío.
  • No debe ser un antipatrón. Es decir, no debe sumar pequeños problemas mientras resuelve un desafío.

Otra microevaluación que aporta es la llamada regla de 3 (preguntas). Propongo que estas también pueden servirnos para evaluar estrategias mediante código, de forma general:

  • ¿Cómo el patrón (su concepto, o el código) ayuda a solucionar un problema?
  • ¿Por qué es útil para solucionar un problema?
  • ¿Su utilidad va más allá del problema inicial?

Hoy en día son casi infinitos los recursos web para revisar esos patrones. Para el lenguaje de Javascript (JS), algunos de los recursos que hallé son:

Algunas de esas fuentes serán de gran utilidad para quien desee explorar más. Por lo tanto y basándome en una revisión bibliográfica, me comprometo acá a exponer ejemplos de los patrones más reconocidos y explicarlos.

Introducción a los patrones de diseño en desarrollo de software


LIBROS CONSULTADOS
Di Francesco, H. (2024) JavaScript Design Patterns. Packt Ed. [Avanzado]

Osmani, A (2023) Learning JavaScript Design Patterns, O'Reilly Ed.

Alexander, Ishikawa y Silverstein (1977) A Pattern Language: Towns, Buildings, Construction. Oxford University Press.