Hoy · Hoja de ruta
- 1. Aprende: Cómo se sostiene la coherencia de los datos y qué pasa cuando se pierde.
- 2. Haz: Sustituye el repositorio por otro sin tocar nada más.
- 3. Comprueba: La API se comporta igual con los dos.
Antes de empezar · 5 minutos, sin apuntes
- ¿Qué pasa si el fichero de datos tiene un producto sin precio?
- ¿Y si tiene dos con el mismo identificador?
- ¿Quién garantiza que eso no ocurra?
El repositorio como frontera
// La interfaz que el servicio conoce
export async function todos() {}
export async function porId(id) {}
export async function guardar(producto) {}
export async function eliminar(id) {}
Mientras el conjunto de funciones y lo que devuelven no cambie, el servicio no distingue si detrás hay un fichero, una base de datos o una API ajena. Eso es lo que hace posible el ejercicio de hoy.
Datos que llegan rotos
function normalizar(crudo) {
return {
id: Number(crudo.id),
nombre: String(crudo.nombre ?? "").trim(),
precio: Number(crudo.precio ?? 0),
stock: Number.isInteger(crudo.stock) ? crudo.stock : 0,
categoria: crudo.categoria ?? "sin-categoria"
};
}
El fichero de datos también es entrada externa
Alguien puede editarlo a mano, puede venir de una versión anterior con otros campos, puede haberse quedado a medias. Si el repositorio devuelve lo que encuentre sin mirar, un dato roto se propaga hasta la respuesta.
Normalizar al leer da al resto del programa la garantía de que un producto tiene la forma de un producto. Es la misma idea de validar en el borde, aplicada al borde de abajo.
Sembrar y reiniciar
Un proyecto que se prueba necesita poder volver a un estado conocido:
{ "scripts": { "sembrar": "node src/herramientas/sembrar.js" } }
Un script que rellena el fichero con datos de ejemplo. Sin él, cada prueba deja los datos en un estado distinto y los fallos dejan de ser reproducibles.
Tarea 8 · Cambiar el almacén
- Escribe la lista de funciones que el servicio espera del repositorio.
- Normaliza los datos al leerlos del fichero.
- Escribe un segundo repositorio que guarde en memoria.
- Cambia entre uno y otro con una variable de entorno.
- Comprueba que la API se comporta igual con los dos y que no has tocado ni rutas ni servicio.
- Escribe el script de siembra.
Checkpoint · fin de la sesión 8
- El repositorio tiene una interfaz clara.
- Los datos se normalizan al leerse.
- Has cambiado de almacén sin tocar las capas superiores.
- Puedes volver a un estado conocido con un comando.
Ver respuestas
1 · Porque puede editarse a mano o venir de otra versión: es entrada externa.
2 · Mientras se mantenga la interfaz que el servicio espera.
3 · Para poder reproducir los fallos partiendo siempre del mismo estado.