Refactorizar de forma segura el código existente de la biblioteca en C#
Sustituir un bucle por LINQ no es automáticamente una mejora. La refactorización debe preservar la comparación, el orden, el comportamiento con null, las referencias completadas y los efectos secundarios.
Resumen del laboratorio

Ilustración conceptual original (SVG)
| De un vistazo | Tu ruta |
|---|---|
| Nivel y tiempo | 300; 60 minutos (estimación de facilitación) |
| Acción inicial | Caracteriza un método antes de reemplazar su bucle. |
| Materiales del aprendiz | Descarga 05-csharp.zip |
| Espacio de trabajo | Abre la raíz del kit extraído; ejecuta la baseline desde . relativa a esa raíz |
| Comprobación inicial esperada | Las pruebas suministradas pasan. Los nuevos requisitos de funcionalidad siguen necesitando sus propias pruebas. |
| Ayuda de configuración | Descarga, extrae, Git local y GitHub opcional |
[!NOTE] El código más corto no es evidencia de equivalencia semántica.
Conceptos · Primera tarea · Lista de evidencias · Restablecer
Objetivos de aprendizaje
- Deduce el comportamiento actual de los métodos del repositorio.
- Separa la refactorización de las correcciones de errores y de la nueva semántica de búsqueda.
- Demuestra la equivalencia en casos límite seleccionados.
Antes de empezar
Prepara 05-csharp usando la guía de configuración.
Usa el
fixture de refactorización de C# incluido.
No cambies versiones de dependencias durante una refactorización.
Conceptos y casos de uso
| Comportamiento | Pregunta de preservación |
|---|---|
SearchPatrons |
¿Sigue Contains distinguiendo mayúsculas y minúsculas como en este fixture? |
| Ordenación | ¿Se conserva el comportamiento actual de comparación y configuración cultural? |
| Completar referencias | ¿Siguen adjuntándose los préstamos relacionados? |
GetPatron |
¿Sigue siendo null el comportamiento ante un ID ausente? |
| Actualización | ¿Se persisten y recargan los mismos campos? |
Escenario del ejercicio
El repositorio usa iteración manual para buscar y filtrar usuarios y préstamos. Simplifica un método manteniendo la interfaz existente y la semántica de resultados.
Tarea 1 - Inspeccionar y caracterizar
-
Lee
JsonPatronRepository,JsonLoanRepository,JsonDatay sus interfaces. -
Ejecuta la pequeña batería del fixture:
dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false -
Añade casos de caracterización antes de editar: encontrado/ausente, lista vacía, mayúsculas y minúsculas mezcladas, nombres visibles duplicados con IDs distintos y referencias completadas.
-
Usa datos aislados; no modifiques el JSON distribuido para obtener los resultados esperados.
Tarea 2 - Solicitar alternativas a Ask y después pasar a Plan
Compare the current loop in SearchPatrons with a LINQ alternative. Preserve
comparison and sort semantics, missing-input behavior, and populated loans.
Identify any material difference; do not edit or claim a speedup.
Elige un método. Exige una tabla de comportamiento antes y después y un comando de pruebas específico. Si el comportamiento actual no es deseable, documenta una función separada en lugar de cambiarlo bajo el nombre de «refactorización».
Tarea 3 - Implementar una parte equivalente
- Pide a Agent que simplifique únicamente el método elegido.
- Inspecciona la ejecución diferida frente a las listas materializadas. No devuelvas un iterador perezoso donde quienes llaman esperan una instantánea.
- Ejecuta la caracterización específica y la batería original.
- Altera temporalmente la comparación de mayúsculas o elimina la resolución de referencias. Confirma que falle una prueba de regresión y después restaura la refactorización.
- Revisa las firmas públicas y las llamadas de guardado y recarga en busca de cambios no intencionales.
Verifica tu trabajo
- Las pruebas existentes y los nuevos casos de caracterización pasan.
- La semántica de mayúsculas, orden y null sigue siendo explícita.
- Las entidades relacionadas siguen completándose.
- Los efectos secundarios de actualización y persistencia no cambian.
- Se detecta una mutación semántica deliberada.
Solución de problemas
Si las pruebas pasan tanto con referencias completadas como sin ellas, mejora las aserciones. Si una ordenación cambia en otra máquina, inspecciona la configuración cultural en lugar de calificarla de aleatoria. Si un ID ausente empieza a provocar una excepción, es un cambio de comportamiento que necesita sus propios criterios de aceptación.
Práctica independiente
Aplica el mismo enfoque a una búsqueda de préstamo. Explica cuándo es preferible el bucle más sencillo a una cadena de operadores LINQ.
Restablecimiento
Guarda la tabla de comportamiento, restaura únicamente los archivos refactorizados y de pruebas en el proyecto copiado y detén la consola si la iniciaste. Nunca hagas un restablecimiento forzado del contenido formativo.