Awesome CopilotAdventures

Documentación del producto verificada

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

Dos mecanismos con interiores enredados y organizados transportan secuencias equivalentes de piezas geométricas.

Ilustración conceptual original (SVG)

Refactoriza sin cambiar mayúsculas, orden ni referencias pobladas.

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

  1. Lee JsonPatronRepository, JsonLoanRepository, JsonData y sus interfaces.

  2. Ejecuta la pequeña batería del fixture:

    dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false
    
  3. 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.

  4. 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

  1. Pide a Agent que simplifique únicamente el método elegido.
  2. Inspecciona la ejecución diferida frente a las listas materializadas. No devuelvas un iterador perezoso donde quienes llaman esperan una instantánea.
  3. Ejecuta la caracterización específica y la batería original.
  4. 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.
  5. 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.

Referencias oficiales

Buscar

Búsqueda en español. Las rutas y los ejemplos ejecutables conservan el texto original.