Desenvolva a disponibilidade de livros em C#
Adicionar uma funcionalidade envolve entrada, recuperação de dados, interpretação do domínio e saída. Uma função auxiliar que nunca é conectada ao menu não é uma funcionalidade concluída.
Resumo do laboratório

Ilustração conceitual original (SVG)
| Em resumo | Sua rota |
|---|---|
| Nível e tempo | 200; 70 minutos (estimativa de facilitação) |
| Ação inicial | Especifique o caso de duas cópias antes de conectar a nova ação de console. |
| Materiais do aluno | Baixe 03-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] Um empréstimo vencido e não devolvido ainda torna aquela cópia indisponível.
Conceitos · Primeira tarefa · Lista de evidências · Redefinir
Objetivos de aprendizagem
- Transforme uma solicitação de usuário em casos explícitos de aceitação.
- Modele a disponibilidade por exemplar físico, não por título.
- Conecte a funcionalidade pelo fluxo de console existente.
- Preserve o comportamento de devolução e associação sem relação com a tarefa.
Antes de começar
Prepare 03-csharp usando a configuração comum.
Use a
fixture de funcionalidade da biblioteca incluída.
O laboratório de configuração de C# descreve SDK, caches e diretórios de execução.
Conceitos e casos de uso
Book descreve um título; BookItem identifica um exemplar físico; Loan registra o
histórico de empréstimos de um exemplar. Um empréstimo devolvido não torna um exemplar indisponível.
Um empréstimo vencido, mas não devolvido, permanece ativo.
Cenário do exercício
Uma pessoa bibliotecária precisa de busca por título sem diferenciar maiúsculas e minúsculas e de uma visualização da disponibilidade de cada exemplar físico. Empréstimos, reservas, migração de banco de dados e autenticação não fazem parte desta funcionalidade.
Tarefa 1 - Investigue e execute a linha de base
-
Inspecione
CommonActions.cs,ConsoleApp.cs, as entidades do núcleo eJsonData. -
Execute a partir da raiz do projeto copiado:
dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false -
Em Ask, rastreie o caminho existente de busca de usuários no menu. Identifique os pontos equivalentes de inserção para busca de livros sem duplicar o ciclo de entrada.
-
Registre a semântica de empréstimo ativo a partir de
ReturnDate, não de uma suposição baseada no vencimento.
Tarefa 2 - Defina a aceitação antes do código
| ID | Caso | Resultado observável esperado |
|---|---|---|
| BOOK-1 | Título parcial, caixa diferente, espaços nas extremidades | Títulos correspondentes após a normalização definida |
| BOOK-2 | Busca em branco | Solicitação/erro claro, sem despejo acidental do catálogo inteiro |
| BOOK-3 | Título desconhecido | Mensagem explícita de ausência de resultados |
| BOOK-4 | Dois exemplares; um empréstimo ativo | Um exemplar indisponível e outro disponível |
| BOOK-5 | Empréstimo histórico devolvido | O exemplar permanece disponível |
| BOOK-6 | Empréstimo ativo vencido | Continua indisponível; data de vencimento exibida como dado histórico |
Use registros sintéticos recém-criados nos testes em vez de depender de datas desatualizadas em arquivos JSON. Especifique uma ordenação determinística de títulos/exemplares.
Tarefa 3 - Planeje o caminho completo
Plan title search and per-copy availability in the existing C# library.
Map BOOK-1..6 to tests and source files. Reuse existing input handling and JSON
loading. Add a distinct CommonActions flag without renumbering existing flags.
Keep return, extension and membership behavior unchanged. Do not edit yet.
Revise os limites de repositório/serviço. Se usar JsonData diretamente no console
para seguir o projeto inicial, explique o acoplamento; não o chame de projeto ideal para produção.
Tarefa 4 - Implemente começando por um teste de regressão que falha
- Adicione um teste para o caso de dois exemplares e confirme que ele falha pela ausência da funcionalidade.
- Peça a Agent que implemente somente o recorte revisado da funcionalidade.
- Inspecione a correspondência, o tratamento de espaços em branco, os empréstimos ativos e a ordenação dos resultados.
- Conecte a exibição do menu, o mapeamento de entrada e o despacho. Preserve os valores existentes das ações.
- Adicione os casos de limite restantes e execute os testes existentes e novos juntos.
- Inicie a aplicação a partir de
src/Library.Consolee exercite o menu manualmente. - Registre a saída real e confirme que a funcionalidade não faz gravações.
Verifique seu trabalho
- Todos os casos BOOK têm evidências executáveis ou manuais claramente identificadas.
- Dois exemplares físicos podem ter disponibilidades diferentes.
- Empréstimos devolvidos e empréstimos ativos vencidos são diferenciados.
- O menu alcança a implementação.
- Os testes existentes continuam passando e a busca não modifica os dados JSON.
Solução de problemas
Se um empréstimo ativo ocultar todos os exemplares, verifique as junções por BookItemId.
Se um método passar nos testes unitários, mas o menu nunca o chamar, inspecione o despacho das ações.
Se uma data de vencimento for antiga, não altere as datas da fixture apenas para esconder um bug.
Prática independente
Projete reservas como uma funcionalidade separada: estados, solicitações conflitantes, expiração e persistência. Não a adicione de forma oportunista a esta alteração de busca.
Restauração
Preserve a tabela de aceitação e a saída e restaure somente os arquivos da funcionalidade/testes na cópia descartável. Uma branch remota ou um repositório público é opcional, não obrigatório.