Reproducción automática
Autocompletar
Clase anterior
Completar y continuar
Refactoring Sostenible
1. Introducción
1.1. Introducción (1:29)
1.2. La degeneración del código (4:21)
1.3. Qué significa Legacy Code (5:01)
2. Repaso: Las reglas del Diseño Simple y POLA
2.1. Las cuatro reglas (2:58)
2.2. Pasa los tests (2:57)
2.3. Código con intencionalidad (2:20)
2.4. DRY (1:16)
2.5. YAGNI y KISS (2:13)
2.6. POLA (4:40)
3. Repaso: Cohesión y Acoplamiento
3.1. Cohesión y acoplamiento (3:35)
3.2. Midiendo el acoplamiento (2:33)
3.3. Hablemos de la cohesión (2:32)
4. Refactoring Kata: Theatrical Players
4.1. Introducción (1:39)
4.2. El origen del ejercicio (0:46)
4.3. Enunciado, código y tests (3:36)
4.4. Objetivo del refactor. Nuevos requisitos. (2:38)
4.5. Descomponiendo la función (4:24)
4.6. Extraer el cálculo de los créditos (4:25)
4.7. Funciones como ciudadanos de primera clase. (1:38)
4.8. Eliminando el primer acumulador (4:19)
4.9. Reemplazando el siguiente acumulador. (3:10)
4.10. Split phase, extraer el tipo que representa el reporte. (3:33)
4.11. Separando los cálculos del formato. (5:39)
4.12. Dividiendo responsabilidades en módulos (3:42)
4.13. Últimos refactors a los cálculos (5:38)
4.14. Implementando el requisito (1:33)
5: Fundamentos de Refactoring
5.1. Fundamentos de Refactoring (5:43)
5.2. Buenas prácticas de Refactoring (6:34)
6: Estrategias de Refactoring
6.1. Principios para refactorizar con éxito (1:50)
6.2. Refactoring Automático (3:22)
6.3. Parallel Change (2:45)
6.4. El método Mikado (5:30)
6.5. Refactoring Exploratorio (4:23)
7. Técnicas de Refactor basadas en ROI
7.1. Introducción (2:12)
7.2. Rename (6:19)
7.3. Introducir variable explicativa (1:48)
7.4. Extraer Función (1:25)
7.5. Inline (1:30)
7.6. Mover (0:55)
7.7. Reemplazar nested conditional por clausula de guarda (2:00)
7.8. Descomponer condicional (1:29)
7.9. Introduce Parameter Object (2:33)
7.10. Reemplazar parámetro por método explícito (1:30)
7.11. Reemplazar bucle por pipeline (1:30)
8. Refactoring Workshop
8.1 Refactoring Workshop (2:13)
8.2. Valores y referencias - Enunciado (1:09)
8.3. Valores y referencias - Aserción 1 (0:40)
8.4. Valores y referencias - Aserción 2 (1:14)
8.5. Valores y referencias - Aserción 3 (1:21)
8.6. Valores y referencias - Aserción 4 (1:09)
8.7. Cambio de implementación - Enunciado (0:46)
8.8. Cambio de implementación - Solución (1:54)
8.9. Cambio en la declaración de la función - Enunciado (0:52)
8.10. Cambio en la declaración de la función - Solución (2:23)
8.11. Reemplazar primitivo por tipo específico de dominio - Enunciado (0:42)
8.12. Reemplazar primitivo por tipo específico de dominio - Solucion (5:57)
8.13. Mover Responsabilidad - Enunciado (1:32)
8.14. Mover Responsabilidad - Solución (1:33)
8.15. Eliminar Responsabilidad Compartida - Enunciado (1:09)
8.16. Eliminar Responsabilidad Compartida - Solución (1:48)
8.17. Inline Superclass - Enunciado (0:48)
8.18. Inline Superclass - Solución (4:46)
8.19. Refactoring de bucles a pipelines - Enunciado (1:01)
8.20. Refactoring de bucles a pipelines - Solución (2:47)
9. Code Smells
9.1. Code Smells (3:24)
9.2. Bloaters (0:53)
9.3. Long Function (2:47)
9.4. Long Parameter List (2:22)
9.5. God Class (2:03)
9.6. Primitive Obsession (2:20)
9.7. Data Clumbs (3:05)
9.8. Dispensables (0:19)
9.9. Comentarios Innecesarios (4:13)
9.10. Duplicated Code (2:17)
9.11. Lazy Element (2:08)
9.12. Data Class (2:43)
9.13. Dead Code (0:54)
9.14. Generalidad Especulativa (2:23)
9.15. Couplers (0:34)
9.16. Feature Envy (2:04)
9.17. Message Chain (3:08)
9.18. Middle Man (2:43)
9.19. Object Oriented Abusers (0:48)
9.20. Repeated Switch Case (2:22)
9.21. Refused Bequest (2:53)
9.22. Campo temporal (3:23)
9.23. Alternative Classes with Different Interfaces (1:56)
9.24. Change Preventers (0:51)
9.25. Cambio Divergente (4:08)
9.26. Shotgun Surgery (3:01)
10. Testing Legacy Code
10.1. Testing Legacy Code (3:23)
10.2. Fundamentos de Testing (2:23)
10.3. Distrubución de los tests - La pirámide (4:03)
10.4. Distribución de los tests - El Iceberg (4:10)
10.5. Principios del Testing (2:57)
10.6. Creando la Red de Seguridad (1:07)
10.7. Técnica Seams (2:44)
10.8. Tests de Caracterización (5:21)
10.9. Snapshot Testing (4:54)
10.10. Approval Testing (3:03)
11. Refactoring Kata: Gilded Rose
11.1. Enunciado, reglas y objetivos (4:18)
11.2. El código a refactorizar (0:57)
11.3. Primeros pasos en la golden master (2:42)
11.4. Combinatoria de ejemplos (1:50)
11.5. Aumentando la cobertura (4:02)
11.6. Mutation Testing (2:28)
11.7. Rango de ejemplos (1:31)
11.8. Empezando a Refactorizar (2:19)
11.9. Refactor Lift Conditional (3:46)
11.10. Elevando el resto de condicionales (6:31)
11.11. Mover la lógica de actualizar al propio tipo (6:09)
11.12. Reemplazar condicional por polimorfismo (4:50)
11.13. Reemplazar herencia por composición (2:14)
11.14. Refactor Final (3:30)
12. Refactoring a Arquitectura Hexagonal
12.2. ¿Qué es la Arquitectura de Software? (3:40)
12.1. Refactoring a Arquitectura Hexagonal (2:09)
12.3. Arquitectura basada en Capas vs Hexagonal (1:46)
12.4. Arquitectura basada en capas, ¿o en realidad es de lasaña? (5:34)
12.5. Arquitectura Hexagonal (puertos y adaptadores) (2:54)
12.6. Dos zonas y tres principios (1:24)
12.7. ¿Puertos y adaptadores? (2:29)
12.8. Casos de Uso (2:11)
12.9. La regla de la dependencia (2:05)
12.10. Beneficios de la Arquitectura Hexagonal (4:37)
12.11. Code Smells de Arquitectura (0:23)
12.12. Smell - No respetar las reglas de la dependencias (2:58)
12.13. Smell - Entidades anémicas e incompletas) (3:35)
12.14. Smell - Adaptadores Inicializados en los casos de uso (2:24)
12.15. Smell - Todos los Caso de uso con un solo método (1:54)
12.16. Smell - Casos de Uso que siempre devuelven primitivos o DTOs (1:57)
12.17. Smell - Repositorios (o puertos) que NO devuelven entidades (1:36)
12.18. Smell - Value Objects Mutables (1:45)
12.19. Smell - Abusar de los tipos integrados en FP y OOP (2:26)
12.20. Smell - Llamar a un App Service desde otro App Service (1:28)
13. Refactoring Legacy Frontend
13.01. Refactoring Legacy Frontend (4:40)
13.02. Definiendo objetivos (1:27)
13.03. Caracterizando los primeros tests e2e (7:14)
13.04. Resto de tests e2e (5:18)
13.05. Último test para cubrir el happy path (2:04)
13.06. Refactorizando los tests (3:53)
13.07. Primero refactors en el código de producción (7:46)
13.08. Dividiendo el God Component (9:48)
13.09. Separando responsabilidades (7:09)
13.10. Eliminando el código muerto y los últimos binds (2:47)
13.11. Simplificando la lógica condicional (7:27)
13.12. TDD en el dominio (11:29)
13.13. Seguimos haciendo TDD (3:41)
13.14. Nuevos tests e2e (2:39)
13.15. Separando la lógica de negocio de la UI (3:30)
13.16. Extraer un servicio de dominio (5:06)
13.17. Patrón Repositorio con estilo funcional (12:08)
13.18. Moviendo el resto de logica de negocio (5:10)
13.19. Extrayendo casos de uso (parte 1) (4:00)
13.20. Extrayendo casos de uso (parte 2) (15:11)
13.21. Parallel Change con Copilot (6:06)
13.22. Frontend Hexagonal (1:49)
13.23. Patrón MVVM en Custom Hook (3:12)
13.24. Eliminando las mutaciones de estado y siguientes pasos (4:50)
14. Estrategias para migrar la Arquitectura Legada
14.1. Estrategias para Migrar la Arquitectura Legada (1:20)
14.2. Strangler Fig (4:37)
14.3. Anticorruption Layer (4:25)
4.8. Eliminando el primer acumulador
Contenido de las clases bloqueado
Si ya estás inscrito,
tendrás que iniciar sesión
.
Inscríbete en el curso para desbloquearlo