Arquitectura de software

Quienes?

Martin Fowler

autor y consultor de software

ha escrito varios libros influyentes sobre el desarrollo de software "Patrones de Diseño Empresarial" y "Refactorización"

es conocido por su trabajo en patrones de diseño, refactoring y arquitectura de software

Eric Evans

es el autor de un libro que trata sobre la forma en que el diseño de software puede estar estrechamente relacionado con la comprensión del dominio de la aplicación "Domain-Driven Design"

conocido por su trabajo en el diseño basado en el dominio y la arquitectura de software escalable

Fred Brooks

científico de la computación

autor de un libro que trata sobre la gestión de proyectos de software "El Mito del Hombre-Mes"

Grady Booch

trabajo desarrollo de patrones de diseño

trabajo en la definición de la arquitectura de software

uno de los fundadores de UML

Por que?

Facilita la comprensión del sistema

Permite a los desarrolladores y otros miembros del equipo entender cómo está organizado un sistema de software y cómo funciona en general.

La arquitectura proporciona una visión global del sistema que facilita la comprensión de sus componentes y cómo se relacionan entre sí.

Permite la evolución del sistema

Una buena arquitectura de software facilita la evolución del sistema a medida que los requisitos cambian

Si la arquitectura está bien diseñada, es más fácil agregar nuevas funcionalidades y hacer cambios en el sistema sin afectar negativamente su estabilidad o su capacidad para escalar

Mejora la calidad del software

Una buena arquitectura de software puede mejorar la calidad del software

Una arquitectura adecuada ayuda a los desarrolladores a evitar errores comunes, como la duplicación de código y la falta de modularidad

También puede ayudar a asegurar que el sistema sea seguro y fácil de mantener

Facilita la comunicación

La arquitectura de software proporciona un lenguaje común para que los desarrolladores, arquitectos y otros miembros del equipo se comuniquen

Al tener una comprensión común de la arquitectura, el equipo puede trabajar más eficazmente y reducir la probabilidad de malentendidos o errores

Reduce costos

Una arquitectura bien diseñada puede reducir los costos de desarrollo y mantenimiento del software

Al evitar problemas comunes y tener una arquitectura escalable, los desarrolladores pueden reducir el tiempo necesario para desarrollar y mantener el software, lo que puede resultar en una reducción de costos significativa a largo plazo

En que consiste

Requisitos del usuario

La arquitectura de software debe estar diseñada para satisfacer los requisitos del usuario, lo que incluye la funcionalidad del sistema, la facilidad de uso y la seguridad

Patrones de diseño

Los patrones de diseño son soluciones probadas y repetibles para problemas comunes de diseño de software

Utilizar patrones de diseño puede mejorar la calidad, el rendimiento y la escalabilidad del sistema

Modelado de datos

La arquitectura de software debe incluir un modelo de datos bien definido para representar la información que se almacena y procesa en el sistema

El modelo de datos debe ser escalable y flexible para adaptarse a cambios futuros

Capas de la arquitectura

La arquitectura de software debe tener varias capas bien definidas, como la capa de presentación, la capa de lógica de negocios y la capa de acceso a datos

Diseño modular

El diseño modular permite que el sistema de software esté compuesto por bloques de construcción independientes y reutilizables, lo que facilita la implementación, mantenimiento y escalabilidad del sistema

Integración

La arquitectura de software debe tener en cuenta la integración con otros sistemas, incluyendo sistemas externos, bases de datos, sistemas de comunicación y otros sistemas que puedan ser necesarios para el funcionamiento del sistema

Rendimiento

La arquitectura de software debe estar diseñada para garantizar un buen rendimiento del sistema, lo que incluye la gestión del rendimiento, la escalabilidad y la optimización del código

Tipos de arquitectura

Arquitectura en capas

La arquitectura en capas organiza el sistema en diferentes capas, cada una con una función específica. Las capas típicas incluyen la capa de presentación, la capa de lógica de negocios y la capa de acceso a datos

Esta arquitectura permite una mayor modularidad, escalabilidad y facilidad de mantenimiento

Arquitectura orientada a servicios (SOA)

La arquitectura orientada a servicios se centra en la creación de servicios independientes que pueden ser reutilizados en diferentes aplicaciones

Estos servicios se comunican a través de interfaces definidas y protocolos estandarizados

Esta arquitectura permite una mayor flexibilidad y reutilización de componentes de software

Arquitectura basada en microservicios

La arquitectura basada en microservicios divide el sistema en pequeñas unidades de servicio independientes y altamente cohesivas

Cada microservicio tiene una responsabilidad única y se comunica con otros servicios a través de interfaces definidas

Esta arquitectura permite una mayor agilidad, escalabilidad y resistencia a fallos

Arquitectura cliente-servidor

La arquitectura cliente-servidor separa el sistema en dos partes: el cliente, que proporciona la interfaz de usuario y el servidor, que proporciona los servicios de lógica de negocios y acceso a datos

Esta arquitectura permite una mayor separación de intereses, permitiendo que el cliente y el servidor se desarrollen y evolucionen de forma independiente

Arquitectura basada en eventos

La arquitectura basada en eventos se centra en la comunicación entre componentes a través de eventos y mensajes

Los componentes pueden publicar eventos a medida que ocurren, y otros componentes pueden suscribirse y recibir notificaciones

Esta arquitectura permite una mayor escalabilidad y flexibilidad al permitir que los componentes se comuniquen de forma asíncrona y sin acoplamiento directo

Crisis del software

los proyectos de software a menudo experimentaban problemas en términos de calidad, costo, plazos y requisitos. Esta crisis se hizo evidente en la década de 1960 y se prolongó hasta la década de 1980

Los sistemas de software se volvieron cada vez más complejos a medida que se agregaban más funciones y características

Los requisitos del software a menudo no estaban bien definidos o eran mal entendidos por los desarrolladores

En los primeros días del desarrollo de software, no existían herramientas y metodologías eficaces para gestionar el proceso de desarrollo

Falta de estándares y mejores prácticas: El desarrollo de software no tenía estándares o mejores prácticas bien establecidos

UML comunes

Diagrama de casos de uso

Este modelo se utiliza para identificar los requisitos funcionales del sistema y las interacciones del usuario con el sistema

El diagrama de casos de uso muestra los actores del sistema, los casos de uso y las relaciones entre ellos

Diagrama de clases

Este modelo se utiliza para modelar la estructura de clases y objetos del sistema, y las relaciones entre ellos

El diagrama de clases muestra las clases, sus atributos, métodos y las relaciones entre las clases

Diagrama de secuencia

Este modelo se utiliza para mostrar la secuencia de interacciones entre los objetos del sistema en un escenario de uso específico

El diagrama de secuencia muestra los objetos, sus interacciones y el orden en que se producen

Diagrama de componentes

Este modelo se utiliza para mostrar la estructura de componentes y su relación con el sistema

El diagrama de componentes muestra los componentes, sus interfaces y las dependencias entre los componentes

Diagrama de despliegue

Este modelo se utiliza para mostrar cómo se implementa el sistema en hardware y software

El diagrama de despliegue muestra los nodos de hardware y software, y las relaciones entre ellos