Skip to content

Commit 60de2da

Browse files
authored
Merge pull request #10 from RodrigoSotelo10/main
Trabajo Rodrigo Sotelo
2 parents 2266a13 + 7e6bdc5 commit 60de2da

File tree

2 files changed

+172
-0
lines changed
  • docs/temas/Estudio de casos sobre refactorización de proyectos legacy

2 files changed

+172
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# 📎 ANEXOS
2+
- Alumno: Rodrigo Sotelo
3+
- Matricula: 21212053
4+
5+
## Prompt utilizado
6+
7+
“Necesito elaborar un estudio de casos sobre refactorización de proyectos legacy para un curso de Patrones de Diseño. El documento debe estar en formato académico, con introducción, desarrollo de varios casos, análisis crítico y conclusiones. Agrega ejemplos de código en C# que ilustren el antes y después de aplicar patrones como Strategy o Facade, Usa un estilo claro
8+
9+
## Reflexión sobre el uso de LLMs 🤔
10+
11+
El uso de ChatGPT permitió **estructurar mejor las ideas** y **organizar el contenido** de manera clara y coherente. Fue especialmente útil para generar **ejemplos de código en C#** y relacionar los casos con los **patrones de diseño** más adecuados.
12+
13+
Aun así, la herramienta tiene limitaciones:
14+
15+
- Algunas respuestas iniciales fueron **demasiado generales** y requirieron **ajustes manuales**.
16+
- **No sustituye** la revisión crítica ni la personalización del contenido.
17+
18+
En conclusión, considero que este tipo de herramientas son un **apoyo válido** siempre que se utilicen de manera ética ⚖️, reconociendo su uso y adaptando los resultados al contexto del curso.
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
# 📑 Estudio de Casos sobre Refactorización de Proyectos Legacy
2+
3+
**Alumno:** Rodrigo Sotelo Rubio
4+
**Matrícula:** 21212053
5+
6+
---
7+
8+
## 1. Introducción
9+
10+
En este documento presento un análisis sobre la refactorización de proyectos legacy, explorando casos prácticos donde se aplicaron patrones de diseño para mejorar la calidad, mantenibilidad y escalabilidad del software.
11+
12+
Un sistema legacy, aunque funcional, suele tener problemas de deuda técnica ⚠️, acoplamiento excesivo o falta de pruebas automatizadas. La refactorización, apoyada en patrones de diseño, es una estrategia clave para extender la vida útil de estos sistemas y alinearlos con las necesidades actuales.
13+
14+
---
15+
16+
## 2. Estudio de Casos 🛠️
17+
18+
### Caso 1: Sistema bancario con código spaghetti 🍝
19+
20+
- **Problema:** el sistema tenía múltiples métodos duplicados y clases monolíticas difíciles de mantener.
21+
- **Refactorización aplicada:** introducción del patrón Facade para unificar accesos a subsistemas.
22+
- **Resultado:** el código se volvió más claro 📝, con menor acoplamiento y mayor facilidad para agregar nuevas funcionalidades.
23+
24+
---
25+
26+
### Caso 2: Aplicación web sin pruebas unitarias 🐞
27+
28+
- **Problema:** cualquier cambio en el código generaba errores en producción porque no había pruebas.
29+
- **Refactorización aplicada:** se aplicó Inyección de Dependencias y se implementó el patrón Strategy para manejar reglas de negocio sin condicionales extensos.
30+
- **Resultado:** se logró escribir pruebas unitarias ✅ y reducir drásticamente los errores en producción.
31+
32+
**Ejemplo en C# 💻**
33+
34+
**Código legacy con condicionales:**
35+
36+
```csharp
37+
public class CalculadoraPrecio
38+
{
39+
public double Calcular(string tipoCliente, double monto)
40+
{
41+
if (tipoCliente == "VIP")
42+
{
43+
return monto * 0.8; // 20% de descuento
44+
}
45+
else if (tipoCliente == "Regular")
46+
{
47+
return monto * 0.9; // 10% de descuento
48+
}
49+
else
50+
{
51+
return monto; // sin descuento
52+
}
53+
}
54+
}
55+
```
56+
57+
**Código refactorizado:**
58+
59+
60+
```csharp
61+
public interface IDescuentoStrategy
62+
{
63+
double AplicarDescuento(double monto);
64+
}
65+
66+
public class DescuentoVIP : IDescuentoStrategy
67+
{
68+
public double AplicarDescuento(double monto) => monto * 0.8;
69+
}
70+
71+
public class DescuentoRegular : IDescuentoStrategy
72+
{
73+
public double AplicarDescuento(double monto) => monto * 0.9;
74+
}
75+
76+
public class SinDescuento : IDescuentoStrategy
77+
{
78+
public double AplicarDescuento(double monto) => monto;
79+
}
80+
81+
public class CalculadoraPrecio
82+
{
83+
private readonly IDescuentoStrategy _estrategia;
84+
85+
public CalculadoraPrecio(IDescuentoStrategy estrategia)
86+
{
87+
_estrategia = estrategia;
88+
}
89+
90+
public double Calcular(double monto) => _estrategia.AplicarDescuento(monto);
91+
}
92+
93+
// Uso
94+
class Program
95+
{
96+
static void Main()
97+
{
98+
var calculadora = new CalculadoraPrecio(new DescuentoVIP());
99+
Console.WriteLine(calculadora.Calcular(1000)); // Imprime 800
100+
}
101+
}
102+
103+
```
104+
105+
### Caso 3: Migración de un monolito a microservicios ⚡
106+
107+
- **Problema:** el monolito en Java no podía escalar adecuadamente y los tiempos de respuesta eran altos.
108+
- **Refactorización aplicada:** se utilizó el patrón Strangler Fig, migrando módulos de forma gradual a microservicios.
109+
- **Resultado:** se logró una arquitectura moderna 🏗️, más flexible y preparada para la escalabilidad.
110+
111+
112+
## 3. Tabla Comparativa 📊
113+
La siguiente tabla compara los casos estudiados, mostrando los problemas encontrados en los sistemas legacy, las refactorizaciones aplicadas, los patrones de diseño utilizados y los resultados obtenidos. Permite visualizar de manera resumida cómo cada estrategia contribuye a mejorar la calidad, mantenibilidad y escalabilidad del software.
114+
115+
| Caso | Problema | Refactorización aplicada | Patrón usado | Resultado |
116+
| ---- | --------------------- | --------------------------------- | ------------- | ---------------------------------------- |
117+
| 1 | Código spaghetti | Simplificación de accesos | Facade | Menor acoplamiento y mayor claridad |
118+
| 2 | Sin pruebas unitarias | Inyección de dependencias + tests | Strategy | Reducción de errores y más confiabilidad |
119+
| 3 | Monolito rígido | Migración progresiva | Strangler Fig | Arquitectura moderna y escalable |
120+
121+
## 4. Análisis Crítico 🧐
122+
La refactorización es más que un proceso técnico: es una estrategia de sostenibilidad del software.
123+
124+
### Ventajas: ✅
125+
126+
- **Reduce deuda técnica.**
127+
- **Facilita el mantenimiento y escalabilidad.**
128+
- **Permite aplicar pruebas automatizadas.**
129+
130+
### Limitaciones: ⚠️
131+
132+
- **Requiere inversión de tiempo y personal capacitado.**
133+
- **Puede ser difícil en sistemas críticos con poca documentación.**
134+
- **En los casos revisados, el uso de patrones como Facade, Strategy y Strangler Fig permitió transformar sistemas rígidos en arquitecturas más limpias y modernas.**
135+
136+
## 5. Conclusiones 🏁
137+
138+
Los sistemas legacy representan un reto, pero con una refactorización adecuada se pueden mantener competitivos.
139+
Los patrones de diseño son aliados esenciales para guiar la modernización de estos proyectos.
140+
Refactorizar no solo mejora la legibilidad, sino que establece una estrategia de evolución sostenible.
141+
142+
143+
144+
145+
146+
147+
148+
149+
150+
151+
152+
153+
154+

0 commit comments

Comments
 (0)