Skip to content

Commit f459486

Browse files
Create README.md
1 parent 8fbbd55 commit f459486

File tree

1 file changed

+90
-0
lines changed
  • docs/temas/Arquitecturas evolutivas y su relación con refactorización progresiva

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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

Comments
 (0)