Desarrollar la disponibilidad de libros en C#
Añadir una función abarca la entrada, la recuperación de datos, la interpretación del dominio y la salida. Un auxiliar que nunca se conecta al menú no es una función completada.
Resumen del laboratorio

Ilustración conceptual original (SVG)
| De un vistazo | Tu ruta |
|---|---|
| Nivel y tiempo | 200; 70 minutos (estimación de facilitación) |
| Acción inicial | Especifica el caso de dos copias antes de conectar la nueva acción de consola. |
| Materiales del aprendiz | Descarga 03-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] Un préstamo vencido y no devuelto sigue haciendo que esa copia no esté disponible.
Conceptos · Primera tarea · Lista de evidencias · Restablecer
Objetivos de aprendizaje
- Convierte una solicitud de usuario en casos de aceptación explícitos.
- Modela la disponibilidad por ejemplar físico, no por título.
- Conecta la función a través del flujo existente de la consola.
- Preserva el comportamiento de devoluciones y membresías ajeno a la función.
Antes de empezar
Prepara 03-csharp usando la configuración común.
Usa el
fixture de funciones de la biblioteca incluido.
El laboratorio de configuración de C# describe el SDK, las cachés y los directorios de ejecución.
Conceptos y casos de uso
Book describe un título; BookItem identifica un ejemplar físico; Loan registra
el historial de préstamos de un ejemplar. Un préstamo devuelto no hace que un ejemplar deje de estar disponible.
Un préstamo vencido pero no devuelto sigue activo.
Escenario del ejercicio
Un bibliotecario necesita una búsqueda de títulos sin distinguir mayúsculas de minúsculas y una vista de la disponibilidad de cada ejemplar físico. Los préstamos, las reservas, la migración de bases de datos y la autenticación no forman parte de esta función.
Tarea 1 - Investigar y ejecutar la línea base
-
Inspecciona
CommonActions.cs,ConsoleApp.cs, las entidades del núcleo yJsonData. -
Ejecuta desde la raíz del proyecto copiado:
dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false -
En Ask, rastrea la ruta existente del menú de búsqueda de usuarios. Identifica los puntos de inserción equivalentes para la búsqueda de libros sin duplicar el bucle de entrada.
-
Registra la semántica de préstamo activo a partir de
ReturnDate, no de una suposición basada en la fecha de vencimiento.
Tarea 2 - Definir la aceptación antes del código
| ID | Caso | Observable esperado |
|---|---|---|
| BOOK-1 | Título parcial, distinta combinación de mayúsculas y espacios en los extremos | Títulos coincidentes tras la normalización definida |
| BOOK-2 | Búsqueda vacía | Solicitud de entrada o error claro, sin volcar accidentalmente todo el catálogo |
| BOOK-3 | Título desconocido | Mensaje explícito de ausencia de resultados |
| BOOK-4 | Dos ejemplares; uno con préstamo activo | Un ejemplar no disponible y otro disponible |
| BOOK-5 | Préstamo histórico devuelto | El ejemplar sigue disponible |
| BOOK-6 | Préstamo activo vencido | Sigue sin estar disponible; la fecha de vencimiento se muestra como dato histórico |
Usa registros sintéticos recién construidos en las pruebas en lugar de depender de fechas obsoletas de los archivos JSON. Especifica un orden determinista de títulos y ejemplares.
Tarea 3 - Planificar la ruta completa
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.
Revisa los límites entre repositorios y servicios. Si usas JsonData directamente en la consola
para ajustarte al proyecto inicial, explica el acoplamiento; no lo describas como un diseño ideal de producción.
Tarea 4 - Implementar empezando por una prueba de regresión que falle
- Añade una prueba para el caso de dos ejemplares y confirma que falla por la ausencia de la función.
- Pide a Agent que implemente únicamente la parte revisada de la función.
- Inspecciona las coincidencias, la gestión de espacios, los préstamos activos y el orden de resultados.
- Conecta la presentación del menú, el mapeo de entradas y el despacho de acciones. Conserva los valores de acciones existentes.
- Añade los casos límite restantes y ejecuta juntas las pruebas existentes y nuevas.
- Inicia la aplicación desde
src/Library.Consoley prueba el menú manualmente. - Registra la salida real y confirma que la función no realiza escrituras.
Verifica tu trabajo
- Todos los casos BOOK tienen evidencia ejecutable o manual claramente etiquetada.
- Dos ejemplares físicos pueden tener distinta disponibilidad.
- Se distinguen los préstamos devueltos de los vencidos que siguen activos.
- El menú llega a la implementación.
- Las pruebas existentes siguen pasando y la búsqueda no modifica los datos JSON.
Solución de problemas
Si un préstamo activo oculta todos los ejemplares, comprueba las uniones por BookItemId.
Si un método supera las pruebas unitarias, pero el menú nunca lo llama, inspecciona el despacho de acciones.
Si una fecha de vencimiento es antigua, no cambies las fechas del fixture solo para ocultar un error.
Práctica independiente
Diseña las reservas como una función separada: estados, solicitudes en conflicto, caducidad y persistencia. No la añadas de forma oportunista a este cambio de búsqueda.
Restablecimiento
Conserva la tabla de aceptación y la salida; después restaura únicamente los archivos de la función y sus pruebas en la copia desechable. Una rama remota o un repositorio público son opcionales, no obligatorios.