Awesome CopilotAdventures

Documentação do produto verificada

Simplifique condicionais complexas sem alterar decisões

Eliminar o aninhamento de condições pode ampliar a elegibilidade acidentalmente. Um cupom que se aplica somente dentro de um ramo premium/de alto valor não deve se tornar uma regra global.

Resumo do laboratório

Duas pistas de processamento conectadas mostram bandejas de recursos separadas e caminhos de retorno.

Ilustração conceitual original (SVG)

Simplifique a estrutura preservando as decisões.

Em resumo Sua rota
Nível e tempo 300; 55 minutos (estimativa de facilitação)
Ação inicial Escolha linhas que distingam igualdade, sobreposição e comportamento de limite.
Materiais do aluno Baixe 09-conditionals.zip
Workspace Abra a raiz do kit extraído; execute a baseline de . relativa a essa raiz
Verificação inicial esperada O projeto selecionado compila. A compilação sozinha não prova o comportamento.
Ajuda de configuração Baixe, extraia, Git local e GitHub opcional

[!NOTE] Mover uma condição para fora do pai pode ampliar a elegibilidade.

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

Objetivos de aprendizagem

  • Derive uma tabela de decisão antes de reescrever condições.
  • Preserve igualdade nos limites, precedência, tetos de desconto e comportamento de erro.
  • Escolha predicados nomeados ou cláusulas de guarda com base na semântica.

Antes de começar

Prepare 09-conditionals usando o guia de configuração. A fixture principal é ECommercePricingEngine. A demonstração de aprovação de empréstimos é opcional e puramente fictícia; não é uma política de crédito nem um sistema para decisões financeiras reais.

Conceitos e casos de uso

Técnica Útil quando Risco
Predicado nomeado Uma condição tem um nome significativo no domínio Esconder condições diferentes sob um único nome
Cláusula de guarda Uma entrada inválida provoca saída antecipada Pular trabalho obrigatório de auditoria/limpeza
Tabela de decisão As regras se sobrepõem Presumir que as linhas são mutuamente exclusivas
Estratégia por política Políticas distintas evoluem de forma independente Adicionar uma hierarquia de classes para ramificações triviais

Cenário do exercício

PricingEngine.CalculateFinalPrice avalia associação, eventos sazonais, cupons, frete e tetos específicos por categoria. Preserve as saídas atuais enquanto esclarece uma família de condições.

Tarefa 1 - Estabeleça a superfície de decisão

  1. Leia ECommercePricingDemo.cs e SecurityTest.cs.

  2. Identifique User, Coupon, Order, SafeAddDiscount e a lógica específica por categoria.

  3. Peça um inventário de regras com referências às fontes, ainda não uma proposta de reescrita.

  4. Compile e execute:

    dotnet build ECommercePricingEngine.csproj -m:1 -p:UseSharedCompilation=false
    dotnet run --no-build --project ECommercePricingEngine.csproj
    
  5. Registre os resultados, incluindo avisos e entradas rejeitadas. Cenários de demonstração e métodos rotulados como de segurança não são um relatório abrangente de segurança ou cobertura.

Tarefa 2 - Derive uma tabela de limites

Comece com estas dimensões e registre o valor esperado real a partir do código-fonte e da linha de base para cada linha selecionada:

Dimensão Casos
Associação Guest, Silver, Gold, Premium
Pedido de alto valor Imediatamente abaixo, igual e acima do limite relevante
Cupom Ausente, válido, expirado, tipo inválido, valor excessivo
Teto por categoria Eletrônicos e uma categoria não eletrônica
Frete Nacional, internacional, cupom de frete grátis
Pedido inválido Nulo, vazio, preço negativo, total excessivo

Não gere o produto cartesiano completo sem avaliar. Escolha casos que diferenciem ramos e interações e explique as lacunas restantes de cobertura.

Tarefa 3 - Planeje uma transformação equivalente

Plan a refactor of membership conditions only. Keep coupon order, category caps,
shipping, and public output unchanged. Show how each selected decision-table row
maps to the new structure. Preserve > versus >= exactly. Do not edit yet.

Revise o comportamento de curto-circuito. Um switch pode melhorar a legibilidade, mas não é evidência de que regras sobrepostas ou efeitos colaterais foram preservados.

Tarefa 4 - Implemente e valide

  1. Peça a Agent que implemente o recorte revisado sem alterações de dependências.
  2. Compare a tabela de decisão com o diff antes de aceitá-lo.
  3. Transforme as linhas escolhidas em asserções executáveis usando os pontos de entrada atuais do projeto ou um pequeno harness de caracterização.
  4. Execute novamente a mesma compilação/demonstração e as asserções.
  5. Altere deliberadamente uma comparação estrita para uma inclusiva; confirme que o caso de igualdade falha e restaure-a.

Verifique seu trabalho

  • As linhas da tabela de decisão incluem igualdade e condições sobrepostas.
  • Os tetos de desconto e as regras de frete mantêm sua ordem.
  • As entradas inválidas mantêm seu comportamento documentado de falha.
  • Uma mutação negativa é detectada por uma verificação executável.
  • Nenhuma alegação de “menos linhas significa correto” é usada como evidência.

Solução de problemas

Se uma condição sem aninhamento produzir um desconto extra, reconstrua suas condições externas originais. Se o registro em log mudar inesperadamente, inspecione os retornos antecipados. Se apenas os caminhos de sucesso passarem, adicione um caso de falha e um de igualdade antes de continuar a refatoração.

Prática independente

Repita uma extração na cópia opcional de LoanApprovalWorkflow usando somente dados sintéticos. Documente a equivalência das regras sem apresentar a demonstração como um sistema de decisão de crédito justo, legal ou pronto para produção.

Restauração

Salve a tabela de decisão e as saídas e restaure somente os arquivos alterados na sua cópia descartável. Não sobrescreva saídas de referência importadas com resultados fabricados.

Referências oficiais

Buscar

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