Awesome CopilotAdventures

Documentação do produto verificada

Refatore o código existente da biblioteca C# com segurança

Substituir um laço por LINQ não é automaticamente uma melhoria. A refatoração deve preservar comparação, ordenação, comportamento com null, referências preenchidas e efeitos colaterais.

Resumo do laboratório

Dois mecanismos com interiores emaranhados e organizados transportam sequências equivalentes de peças geométricas.

Ilustração conceitual original (SVG)

Refatore sem mudar maiúsculas, ordem ou referências preenchidas.

Em resumo Sua rota
Nível e tempo 300; 60 minutos (estimativa de facilitação)
Ação inicial Caracterize um método antes de substituir seu laço.
Materiais do aluno Baixe 05-csharp.zip
Workspace Abra a raiz do kit extraído; execute a baseline de . relativa a essa raiz
Verificação inicial esperada Os testes fornecidos passam. Os novos requisitos de funcionalidade ainda precisam de testes próprios.
Ajuda de configuração Baixe, extraia, Git local e GitHub opcional

[!NOTE] Código mais curto não é evidência de equivalência semântica.

Conceitos · Primeira tarefa · Lista de evidências · Redefinir

Objetivos de aprendizagem

  • Derive o comportamento atual a partir dos métodos do repositório.
  • Separe refatoração de correções de bugs e de novas semânticas de busca.
  • Comprove a equivalência em casos de limite selecionados.

Antes de começar

Prepare 05-csharp usando o guia de configuração. Use a fixture de refatoração C# incluída. Não altere versões de dependências durante uma refatoração.

Conceitos e casos de uso

Comportamento Pergunta sobre preservação
SearchPatrons Contains continua diferenciando maiúsculas e minúsculas como nesta fixture?
Ordenação O comportamento atual de comparação/cultura é preservado?
Preenchimento Os empréstimos relacionados continuam vinculados?
GetPatron O comportamento para ID ausente continua sendo null?
Atualização Os mesmos campos são persistidos e recarregados?

Cenário do exercício

O repositório usa iteração manual para encontrar e filtrar usuários/empréstimos. Simplifique um método mantendo a interface existente e a semântica dos resultados.

Tarefa 1 - Inspecione e caracterize

  1. Leia JsonPatronRepository, JsonLoanRepository, JsonData e suas interfaces.

  2. Execute a pequena suíte da fixture:

    dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false
    
  3. Adicione casos de caracterização antes de editar: encontrado/ausente, lista vazia, mistura de maiúsculas e minúsculas, nomes de exibição duplicados com IDs distintos e referências preenchidas.

  4. Use dados isolados; não modifique o JSON distribuído para obter os resultados esperados.

Tarefa 2 - Peça alternativas e depois use 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.

Escolha um método. Exija uma tabela de comportamento antes/depois e um comando de teste direcionado. Se o comportamento atual for indesejável, documente uma funcionalidade separada em vez de alterá-lo sob o nome de “refatoração”.

Tarefa 3 - Implemente um recorte equivalente

  1. Peça a Agent que simplifique somente o método escolhido.
  2. Inspecione execução adiada versus listas materializadas. Não retorne um iterador preguiçoso onde os chamadores esperam um instantâneo.
  3. Execute a caracterização direcionada e a suíte original.
  4. Altere temporariamente a comparação de caixa ou omita o preenchimento. Confirme que um teste de regressão falha e restaure a refatoração.
  5. Revise assinaturas públicas e chamadas de gravação/recarga em busca de alterações não intencionais.

Verifique seu trabalho

  • Os testes existentes e os novos casos de caracterização passam.
  • A semântica de caixa, ordenação e null permanece explícita.
  • As entidades relacionadas continuam preenchidas.
  • Os efeitos colaterais de atualização/persistência permanecem inalterados.
  • Uma mutação semântica deliberada é detectada.

Solução de problemas

Se os testes passarem com ou sem preenchimento, melhore as asserções. Se a ordenação mudar em outra máquina, inspecione a cultura em vez de chamá-la de aleatória. Se um ID ausente passar a lançar exceção, isso é uma mudança de comportamento que exige critérios de aceitação próprios.

Prática independente

Aplique a mesma abordagem a uma consulta de empréstimo. Explique quando o laço mais simples é preferível a uma cadeia de operadores LINQ.

Restauração

Salve a tabela de comportamento, restaure somente os arquivos refatorados e de testes no projeto copiado e pare o console se ele tiver sido iniciado. Nunca faça uma redefinição forçada do currículo.

Referências oficiais

Buscar

Busca em português do Brasil. Os caminhos e os exemplos executáveis mantêm o texto original.