Arquitectura de software y su diferencia con los patrones de diseño
Entender la arquitectura de software y diferenciarla de los patrones de diseño te permite poder aplicar esta buena práctica con confianza y despegar en tu carrera 😉

Estimado dev, hay mucha confusión allá afuera sobre patrones de diseño, que vimos en la entrada anterior y la arquitectura de software, sin embargo en esta lectura desmitificaremos ambos conceptos, acompáñame en este interesante camino, ya que te va a liberar de algunos mitos y comenzarás a tocar estos temas con propiedad, además te servirá para cuando atravieses entrevistas técnicas en donde se suele incluir preguntas de este tipo.

Qué es la arquitectura de software?

De entrada déjame decirte que no hay un consenso ni entre los más entendidos, y es por ello que hay tanta confusión, sin embargo sí coinciden en algo los autores de los libros más reconocidos en este campo de estudio, y es que la arquitectura de software es la estructura que se le da a un sistema al más alto nivel, organizando a todos sus componentes e interrelacionándolos entre ellos.

Para entender mejor este asunto, dejemos que personas mucho más entendidas que nosotros al respecto nos den su definición, y la pondré en su idioma original (recuerdas lo que mencioné en esta entrada del blog? ahí tienes pues English is everywhere 😄):

"The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both"

Len Bass, Rick Kazman, Paul Clements

Esta definición la recogen los autores del libro Software architecture in practice y la puedes hallar en la página 25, te recomiendo que al menos como curiosidad puedas leerlo tu mismo, créeme que será de mucha ayuda cuando en alguna entrevista de trabajo te pregunten por esta definición y tu además de mencionar tu definición la sustentes con una fuente seria como dicho libro, o cualquier otro de tu preferencia, y por su puesto recomendar a este blog y compartirlo en tus redes nunca está de más y te lo agradecería 😊

La definición lo que menciona es: la arquitectura de software de un sistema es el conjunto de estructuras necesarias para dar sentido a un sistema, lo cual abarca los elementos del software, las relaciones entre ellos y las propiedades de ambos.

Todo software tiene una arquitectura per sé, por más trivial que el sistema sea, esté documentado o no, sea intencional la arquitectura o no, es igual, y también es cierto que no necesariamente dicha arquitectura empleada sea conocida, ya que existen muchas y además variantes de ellas, incluso los programadores pudieron aprender y aplicar una de forma intuitiva y empírica, claro está, esto no significa que esto sea siempre correcto ni adecuado.

via GIPHY

Patrones de arquitectura y estilos arquitectónicos

Es importante también tener claro también estos conceptos, ya que están relacionados pero no son lo mismo, pero seamos prácticos y en un par de párrafos dejemos claro sus diferencias y qué son; Los patrones arquitectónicos son aquellas soluciones recurrentes a un problema de diseño entre componentes y su relación entre ellos y puede estar conformada de uno o más patrones de diseño.

Por otra parte un estilo arquitectónico es un marco de referencia o estilo de trabajo que puede componerse de uno o más patrones arquitectónicos. Estas definiciones están de acuerdo con mi buen amigo Óscar Blancarte, en su libro Introducción a la Arquitectura de software en la página 48, disponible desde https://reactiveprogramming.io/books/software-architecture/es esta también es una lectura recomendada. Entre algunos ejemplos de los principales estilos arquitectónicos tenemos a la arquitetura monolítica, cliente-servidor, SOA, microkernel, en capas y microservicios.

Diferencias con los patrones de diseño

Mientras que los patrones de diseño como vimos en esta entrada anterior, afectan a un componente del sistema en particular o el comportamiento de este, como por ejemplo la forma de crear nuevos objetos, la arquitectura o el patrón arquitectónico afecta a todo el sistema en su conjunto, por eso se menciona que es un estilo de estructura al más alto nivel, en otras palabras la principal diferencia estriba en el campo de acción de cada una de ellas.

Espero hayan quedado los conceptos más claros y si este contenido te aportó valor de alguna manera, considera compartirlo en tus redes sociales y compartir así el conocimiento 😉

5 comentarios en «Arquitectura de software y su diferencia con los patrones de diseño»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *