# Patrones Arquitectónicos de Software ## Patrones de Arquitectura Fundamentales ### 1. Layered Architecture (Arquitectura en Capas) **Descripción**: Organiza la aplicación en capas horizontales con responsabilidades específicas. **Capas típicas**: - **Presentation Layer**: UI, controladores, endpoints - **Business/Service Layer**: Lógica de negocio - **Data Access Layer**: Repositorios, ORM, queries - **Database Layer**: Base de datos **Ventajas**: - Separación clara de responsabilidades - Fácil de entender y mantener - Reutilización de componentes **Cuándo usar**: Aplicaciones empresariales tradicionales, sistemas CRUD ### 2. Clean Architecture **Descripción**: Arquitectura centrada en el dominio con dependencias que apuntan hacia adentro. **Capas**: - **Entities**: Reglas de negocio fundamentales - **Use Cases**: Reglas de negocio específicas de la aplicación - **Interface Adapters**: Controladores, presentadores, gateways - **Frameworks & Drivers**: UI, DB, frameworks externos **Principios**: - Independencia de frameworks - Testeable sin UI, DB o servicios externos - Independiente de la base de datos ### 3. Hexagonal Architecture (Ports & Adapters) **Descripción**: Aísla el núcleo de la aplicación de preocupaciones externas. **Componentes**: - **Core**: Lógica de negocio pura - **Ports**: Interfaces que definen contratos - **Adapters**: Implementaciones concretas de los ports **Beneficios**: - Facilita testing con mocks - Intercambio fácil de implementaciones - Aislamiento del dominio ### 4. Microservices Architecture **Descripción**: Descompone la aplicación en servicios pequeños e independientes. **Características**: - Servicios desplegables independientemente - Comunicación a través de APIs bien definidas - Base de datos por servicio - Equipos autónomos por servicio **Patrones asociados**: - API Gateway - Service Discovery - Circuit Breaker - Event Sourcing ### 5. Event-Driven Architecture **Descripción**: Los componentes se comunican a través de eventos asincrónicos. **Componentes**: - **Event Producers**: Generan eventos - **Event Consumers**: Procesan eventos - **Event Store**: Almacena eventos - **Event Bus**: Transporta eventos **Ventajas**: - Desacoplamiento temporal - Escalabilidad - Resilencia - Auditoría natural ## Patrones de Diseño Complementarios ### Repository Pattern ```java public interface UserRepository { Optional findById(Long id); List findAll(); User save(User user); void delete(Long id); } ``` ### Command Query Responsibility Segregation (CQRS) **Separación de operaciones de lectura y escritura**: - Commands: Modifican estado - Queries: Solo leen datos ### Domain-Driven Design (DDD) **Conceptos clave**: - **Bounded Context**: Límites del dominio - **Aggregates**: Unidades de consistencia - **Value Objects**: Objetos inmutables - **Domain Services**: Lógica que no pertenece a entidades ## Guías de Selección de Arquitectura | Tipo de Aplicación | Arquitectura Recomendada | |-------------------|-------------------------| | CRUD simple | Layered Architecture | | Sistema empresarial complejo | Clean Architecture + DDD | | Alta escalabilidad | Microservices | | Procesamiento de eventos | Event-Driven | | Aplicación web moderna | Hexagonal + CQRS | ## Principios SOLID en Arquitectura 1. **Single Responsibility**: Cada módulo tiene una razón para cambiar 2. **Open/Closed**: Abierto para extensión, cerrado para modificación 3. **Liskov Substitution**: Los subtipos deben ser sustituibles 4. **Interface Segregation**: Interfaces pequeñas y específicas 5. **Dependency Inversion**: Depender de abstracciones, no concreciones