Mostrando entradas con la etiqueta Arquitectura de Software. Mostrar todas las entradas
Mostrando entradas con la etiqueta Arquitectura de Software. Mostrar todas las entradas

jueves, 2 de enero de 2025

¿Quién inventó los patrones de diseño?

Continuando con la saga de Patrones de diseño, hoy quiero contextualizar un poco y conversar del origen. Como había mencionado en post anterior, los patrones son soluciones a problemas habituales en el coding, y, cuando una solución se repite una y otra vez, este pasa a ser bautizado con un nombre y explicar su solución a detalle. De esta manera nace un patrón.

De acuerdo a la fuente estudiada,  en 1977 surge un libro llamado "A Pattern Language"/"El lenguaje de patrones". Su contenido es orientada a la arquitectura urbana escrito por Christopher Alexander.


Básicamente, contempla una seria de patrones para describir por ejemplo: alto y tipos de ventanas, niveles de un edicto, zonas verdes de un emplazamiento, etc.

En 1995, esta idea fue traslada a las diversas problemas y soluciones que se pueden tener a la hora de codificar un software. Los autores de esta genial idea son Eric Gamma, John Vlissides, Ralph Johnson y Richard Helm en su publicación "Patrones de diseño".



Este libro presenta 23 patrones que resuelven problemas de diseño orientado a objetos. Desde entonces, se han descubierto numeroso patrones de diseño.


martes, 31 de diciembre de 2024

Introducción a Patrones de Diseño

 Tal como hablé en otro post, tenemos 2 conceptos: Patrones Arquitectónicos y Patrones de Diseño de Software. Me enfocaré en este último en esta serie de post.

Los patrones de diseño son soluciones habituales a problemas frecuentes en el desarrollo de software. Siempre me ha encantado la analogía, el cual dice, que son como planos para construir un puente, en donde, se considera: 

  • El tráfico de personas o vehículos
  • condiciones climáticas
  • el entorno geográfico
  • etc.
Estos patrones no son porciones de código que puedan llegan a copiarse y pegar en nuestro proyecto, sino más bien, son conceptos que deben de entenderse, asimilarse y luego implementar en tu proyecto según la naturaleza de tu proyecto.



¿En qué consiste un patrón?

La gran mayoría son descritos para que puedan ser reproducidos en el contexto que a ti te envuelve. Y esta descripción contiene estas secciones:
  • Propósito: Explica el problema y la solución.
  • Motivación: Explica en detalle el problema y la solución brindada.
  • Estructura: Indica una estructura de clases y su relación.
  • Código:  Es un ejemplo  para facilitar la asimilación.

Clasificación de los patrones

Debido a que un patrón varía en su complejidad y el objetivo a resolver es que surgen 3 grupos:
  1. Patrones Creaciones: Ofrecen mecanismos para creación de objetos y facilitan la flexibilidad y reutilzación de código.
  2. Patrones Estructurales: Explican como se ensamblan los objetos y clases para mantener la flexibilidad y eficiencia
  3. Patrones de Comportamiento: Buscan una comunicación efectiva y la asignación de responsabilidades entre los objetos.

En otro post abordaré cada vez mas amplio estos conceptos. Nos vemos en el siguiente post.

PATRONES ARQUITECTÓNICOS y PATRONES DE DISEÑO. Es lo mismo?

Quiero compartir una pequeña introducción a este tema. Muchas veces se confunde patrones de diseño con patrones arquitectónicos.

Patrones de Diseño

Un patrón de diseño son soluciones habituales a problemas que ocurren con frecuencia en el diseño de piezas, módulos, etc. Estos patrones no son código que puedas llegar y copiar, más bien, es una conceptualización que tu podrás adaptar para encajar a la resolución que buscas en tu aplicación.   Acá voy a mencionar algunos que he tenido la oportunidad de usar: 

  • fachada, 
  • abstract factory,
  • singleton,
  • fábrica.
  • entre otros
Existen muchos más que te recomiendo revisar en el libro REFACTORING GURU (muy bueno). En otros post voy a ir desarrollando mas este tema, con su tipos y características.

PatronesArquitectónicos

Se enfocan en la resolución de problemas en aplicaciones completas a más alto nivel para obtener la mejor performance, asegurar que tenga escalabilidad, soporte latencia, tolerancia a fallos, etc. Aquí puedo mencionar algunos de estos patrones:
  • microservicios, 
  • EDA (Event Driven Architecture)
  • Capas, 
  • MVC, 
  • CQRS, 
  • entre otros.

Los patrones arquitectónicos pueden aplicar patrones de diseños para su implementación en sus piezas más pequeñas.
No confundir tampoco con las buenas prácticas de desarrollo como lo son SOLIC que quizás voy a compartir en otro post.



Este es un resumen muy breve, si quieres agregar más a esto: bienvenido y gracias. Espero tus comentarios 👇