|
| 1 | +# Arquitecturas evolutivas y su relación con refactorización progresiva |
| 2 | +# Alvarado Cardona Antonio 22210279 |
| 3 | + |
| 4 | +## Arquitecturas evolutivas |
| 5 | + |
| 6 | +Las arquitecturas evolutivas son un enfoque de diseño de software en el que la arquitectura no se define como algo rígido y definitivo, sino como un sistema que puede adaptarse y mejorar con el tiempo. |
| 7 | +Se basan en principios como: |
| 8 | + |
| 9 | +**Adaptabilidad:** La arquitectura está preparada para responder a cambios en requerimientos, tecnologías o negocio. |
| 10 | + |
| 11 | +**Incrementalidad:** El sistema crece poco a poco, en iteraciones. |
| 12 | + |
| 13 | +**Feedback continuo:** Se mide la calidad de la arquitectura a través de pruebas, métricas y validaciones. |
| 14 | + |
| 15 | +**Resiliencia al cambio:** Se minimiza el costo de introducir nuevas funcionalidades. |
| 16 | + |
| 17 | +En lugar de “diseñar todo desde el principio”, la arquitectura se construye en paralelo con el desarrollo del software, evolucionando conforme el sistema crece. |
| 18 | + |
| 19 | +### Refactorización progresiva |
| 20 | + |
| 21 | +La refactorización progresiva es la práctica de mejorar continuamente el código existente, sin cambiar su funcionalidad observable, para: |
| 22 | + |
| 23 | +- Reducir deuda técnica. |
| 24 | +- Mejorar la legibilidad y mantenibilidad. |
| 25 | +- Alinear la implementación con los principios de diseño. |
| 26 | + |
| 27 | +Se hace en pequeños pasos controlados, acompañados de pruebas automatizadas, para evitar introducir errores. |
| 28 | + |
| 29 | +## Relación entre arquitecturas evolutivas y refactorización progresiva |
| 30 | +La conexión es muy estrecha: |
| 31 | + |
| 32 | +#### Mantenimiento de la calidad arquitectónica: |
| 33 | +Una arquitectura evolutiva necesita mantenerse flexible y sana en el tiempo. La refactorización progresiva permite ajustar el código y los módulos para que la arquitectura no se deteriore. |
| 34 | + |
| 35 | +**Adaptación a cambios:** Cuando los requerimientos cambian, la refactorización facilita modificar componentes internos sin romper la funcionalidad externa, lo cual mantiene la capacidad evolutiva. |
| 36 | + |
| 37 | +**Minimización de deuda técnica:** Si la arquitectura evoluciona pero no se refactoriza el código, la deuda técnica se acumula. Con refactorización progresiva se asegura que la evolución sea sostenible. |
| 38 | + |
| 39 | +**Iteración conjunta:** Mientras la arquitectura evoluciona en ciclos (añadiendo nuevas capacidades), la refactorización acompaña cada paso para mantener la coherencia y robustez del sistema. |
| 40 | + |
| 41 | +## Ejemplo práctico: Sistema de pedidos de café |
| 42 | +### 1. Versión inicial (arquitectura simple) |
| 43 | + |
| 44 | +Todo está en una sola clase: |
| 45 | +``` java |
| 46 | +class CafeApp { |
| 47 | + void tomarPedido() { ... } |
| 48 | + void prepararCafe() { ... } |
| 49 | + void cobrar() { ... } |
| 50 | +} |
| 51 | +``` |
| 52 | + |
| 53 | +Funciona bien al inicio porque el negocio es pequeño. |
| 54 | + |
| 55 | +### 2. Problema (necesidad de evolución) |
| 56 | + |
| 57 | +El negocio crece y muchos baristas usan la app al mismo tiempo. |
| 58 | + |
| 59 | +Difícil mantener el código. |
| 60 | + |
| 61 | +Si falla “cobrar”, también se rompe “tomarPedido”. |
| 62 | + |
| 63 | +### 3. Refactorización progresiva |
| 64 | + |
| 65 | +En lugar de reescribir todo: |
| 66 | + |
| 67 | +Paso 1: Extraer responsabilidades en clases separadas. |
| 68 | +``` java |
| 69 | +class PedidoService { void tomarPedido() { ... } } |
| 70 | +class CafeService { void prepararCafe() { ... } } |
| 71 | +class PagoService { void cobrar() { ... } } |
| 72 | +``` |
| 73 | + |
| 74 | +Paso 2: Conectar los servicios poco a poco. |
| 75 | +``` java |
| 76 | +class CafeApp { |
| 77 | + PedidoService pedido = new PedidoService(); |
| 78 | + CafeService cafe = new CafeService(); |
| 79 | + PagoService pago = new PagoService(); |
| 80 | +} |
| 81 | +``` |
| 82 | +### 4. Resultado |
| 83 | + |
| 84 | +La arquitectura evoluciona de un monolito desordenado a un sistema modular. |
| 85 | + |
| 86 | +La refactorización progresiva permitió hacerlo en pasos pequeños, sin detener el negocio. |
| 87 | + |
| 88 | + |
| 89 | +### En resumen: |
| 90 | +Las arquitecturas evolutivas permiten que el sistema cambie y crezca de manera flexible, mientras que la refactorización progresiva es la herramienta práctica que asegura que esos cambios puedan hacerse de forma ordenada, sostenible y sin pérdida de calidad. |
0 commit comments