Lección 21 de 24· M02

Hechas: 0/24(0%)

M02L21Semana 6~3 h

Ficha M02

L21 — CLI: dominio y persistencia

~3 h · Semana 6

Separas dominio (reglas) de adaptadores (CLI (interfaz de línea de comandos), fs). La persistencia queda detrás de una interfaz clara.

Objetivo

Módulo dominio/ con operaciones agregarHabito, marcarHecho, listar sobre EstadoApp sin console ni fs.

Por qué importa

El proyecto final debe enseñarse en portafolio. Capas claras = mantenible y testeable.

Pasos

1. Extraer dominio (70 min)

src/dominio/operaciones.ts:

import type { EstadoApp } from "../modelo/almacen.js";
import { crearHabito } from "../modelo/habito.js";
import { validarNombreHabito } from "../validacion/habito.js";

export function agregarHabito(estado: EstadoApp, nombreRaw: string): EstadoApp {
  const v = validarNombreHabito(nombreRaw);
  if (!v.ok) throw new Error(v.error);
  const habito = crearHabito(v.value);
  return { ...estado, habitos: [...estado.habitos, habito] };
}

Implementa marcarHechoPorId y tests asociados.

2. Adaptador CLI (50 min)

cli.ts solo parsea, llama dominio, imprime, guarda.

3. Tests dominio (50 min)

≥3 tests nuevos sobre operaciones puras.

4. README proyecto (20 min)

Diagrama texto: CLI → dominio → io.

Lectura de esta lección

Fuente Qué leer
Código limpio Repaso cap. 3 (funciones pequeñas)
Catálogo Bibliografía · M02

Hecho cuando

  1. dominio/ sin imports de fs ni process (salvo tipos Node si unavoidable).
  2. Tests dominio en verde.
  3. Comandos previos siguen funcionando manualmente.

Errores comunes

  • “Dominio” que importa cli.ts.
  • Estado global mutable fuera de EstadoApp.
  • Saltarse tests al mover archivos.

Siguiente

L22 — Comandos stats y pulido UX

←→