Parte 2 - Tema 2 Flashcards
¿Qué es un patrón de integración?
Es una solución reutilizable y probada para resolver problemas comunes en la integración de diferentes sistemas o aplicaciones.
¿Por qué son importantes los patrones de integración?
Aceleran el desarrollo, promueven la coherencia, facilitan el mantenimiento y mejoran la escalabilidad de las soluciones de integración.
¿Cuáles son los tipos principales de patrones de integración?
- Estructurales: Definen la arquitectura general de la integración (p.ej., bus de servicios, hub and spoke).
- De comportamiento: Describen cómo interactúan los sistemas (p.ej., solicitud-respuesta, publicación-suscripción).
- De datos: Manejan la transformación y el mapeo de datos (p.ej., mediación, correlación).
¿Qué es el patrón de bus de servicios?
Un componente central (bus) que actúa como intermediario entre múltiples sistemas, desacoplándolos y facilitando la comunicación.
¿Qué es el patrón hub and spoke?
Un hub central se conecta a múltiples sistemas spoke, centralizando la integración y simplificando la gestión.
¿Qué es el patrón de publicación-suscripción?
Los sistemas publican eventos y otros sistemas se suscriben para recibirlos, permitiendo una comunicación flexible y desacoplada.
¿Qué factores se deben considerar al elegir un patrón de integración?
Requisitos funcionales y no funcionales, complejidad de la integración, escalabilidad, rendimiento, seguridad.
¿Cuáles son las ventajas y desventajas de cada patrón?
- Bus de servicios: Alta flexibilidad, desacoplamiento, pero puede ser complejo de configurar y administrar.
- Hub and spoke: Centralización, fácil gestión, pero puede convertirse en un punto único de falla.
- Publicación-suscripción: Escalabilidad, desacoplamiento, pero requiere una infraestructura de mensajería.
¿Qué es la cohesión en el contexto del diseño de sistemas?
Es la medida en que los elementos de un módulo (como una clase o un componente) están relacionados entre sí y colaboran para cumplir una única tarea.
¿Por qué es importante la alta cohesión?
- Facilita la comprensión, el mantenimiento y la reutilización del código.
- Reduce la probabilidad de errores.
- Mejora la testabilidad.
¿Qué es el acoplamiento en el diseño de sistemas?
Es la medida en que un módulo depende de otros módulos. Es decir, qué tan conectados están los diferentes componentes de un sistema.
¿Por qué es deseable un bajo acoplamiento?
- Facilita los cambios y la evolución del sistema.
- Reduce el impacto de los errores.
- Aumenta la independencia de los módulos.
¿Cuál es la relación entre cohesión y acoplamiento?
Generalmente, una alta cohesión va de la mano de un bajo acoplamiento. Módulos con una responsabilidad bien definida (alta cohesión) tienden a tener menos dependencias con otros módulos (bajo acoplamiento).
¿Cuáles son los principales beneficios de diseñar sistemas con alta cohesión y bajo acoplamiento?
- Mayor mantenibilidad.
- Mayor reutilización de código.
- Menor complejidad.
- Mayor facilidad para realizar pruebas.
- Menor riesgo de introducir errores al realizar cambios.
¿Puedes dar un ejemplo de un módulo con alta cohesión y bajo acoplamiento?
Una clase que se encarga únicamente de validar datos de entrada.
¿Puedes dar un ejemplo de un módulo con baja cohesión y alto acoplamiento?
Una clase que realiza cálculos matemáticos, maneja la interfaz de usuario y accede a la base de datos.
¿Qué técnicas se pueden utilizar para mejorar la cohesión y reducir el acoplamiento?
- Principio de responsabilidad única (SRP): Cada clase debe tener una única razón para cambiar.
- Encapsulación: Ocultar los detalles de implementación de una clase.
- Interfaces bien definidas: Especificar claramente cómo interactúan los módulos.
- Patrones de diseño: Utilizar patrones como Fachada, Adaptador, etc.
¿Qué es un patrón de diseño?
Es una solución reutilizable y probada a un problema común en el diseño de software. Es como una plantilla que se puede adaptar a diferentes situaciones.
¿Cuál es el objetivo principal de los patrones de diseño?
Mejorar la calidad del software, haciéndolo más flexible, mantenible, reutilizable y escalable.