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