Guía del CLI

@nestjslatam/ddd-cli

La guía del CLI

Una herramienta que lee la librería que tú tienes instalada. No genera plantillas a ciegas: parsea tus .d.ts con la API del compilador de TypeScript, así que describe tu proyecto y no un ideal.

Instalar

Como dependencia de desarrollo. No es una dependencia de ejecución: tu aplicación no lo necesita en producción.

npm install -D @nestjslatam/ddd-cli

Orientarse: ddd list

Lo primero que conviene hacer en un proyecto que no conoces. Imprime cada pieza que exporta tu versión de la librería, agrupada por cómo se usa.

npx ddd list
  extend     hereda de ella
  implement  cumple la interfaz
  compose    el agregado delega en ella
  use        se llama directamente

  Aggregates
  compose    AggregateValidationOrchestrator
  extend     DddAggregateRoot                 extends AggregateRoot

  Value Objects
  extend     DddValueObject      extends AbstractNotifyPropertyChanged
  extend     IdValueObject       extends DddValueObject
  extend     NumberValueObject   extends DddValueObject
  extend     StringValueObject   extends DddValueObject
  …
  66 símbolos · ddd explain <nombre> para cualquiera de ellos

Esa división en cuatro es casi todo lo que hay que entender del diseño. compose es la que más se confunde: BrokenRulesManager, ValidatorRuleManager y TrackingStateManager son colaboradores que un agregado tiene, no bases de las que se hereda.

Andamiar: new y extend

npx ddd new value-object OrderTotal --kind number
npx ddd new validator OrderTotalRules --for OrderTotal
npx ddd extend AbstractRuleValidator ShippingRules

extend deriva el contrato de las declaraciones instaladas, así que funciona con bases que nunca ha visto — incluida una que hayas escrito tú en tu propio fork.

No escribe nada antes de que veas la lista y confirmes:

npx ddd new value-object Sku
  Sku extends StringValueObject

  Ficheros bajo src
  create  shared/valueobjects/sku.ts  value-object

  1 nuevo · 0 ya existentes
  ¿Escribir este fichero? (s/N)

Y todo lo que emite pasa su propia auditoría: las plantillas no son sólo plausibles, cumplen las cuatro reglas que validate aplica.

Auditar: ddd validate

Cuatro reglas, cada una un error que la librería hace fácil y silencioso. Los cuatro compilan. Los cuatro pasan los tests.

factory-checks-validity

Un create() que no comprueba isValid. Devuelve objetos inválidos sin error.

super-add-validators

Un override que no encadena. Los validadores de la base desaparecen.

no-subclass-state-in-add-validators

Leer un campo propio dentro de addValidators(). Revienta en cada construcción — así se publicó rota NumberValueObject durante dos versiones.

handler-commits-events

Un handler sin commit(). El comando triunfa y ningún evento se despacha.

Además señala las llamadas a isValid que no cuadran con tu versión instalada, que es la parte mecánica de migrar de la 2.x a la 3.x:

npx ddd validate
error  3  Order.create() llama a isValid(), pero la librería
          instalada lo declara como getter

Códigos de salida: 0 limpio, 1 con violaciones. Se puede poner en CI tal cual.

Servidor MCP, sin clave de API

Si ya trabajas en Claude Code, Codex o Cursor, ese agente tiene modelo y credenciales. El CLI no necesita los suyos.

claude mcp add ddd -- npx -y @nestjslatam/ddd-cli mcp

Aparecen siete herramientas: ddd_list, ddd_describe, ddd_new, ddd_extend, ddd_validate, ddd_aggregate_schema y ddd_render_aggregate.

El reparto de trabajo es lo importante. El agente decide la frontera del agregado, las invariantes y los nombres — criterio. El CLI hace lo que un modelo hace mal: leer las declaraciones instaladas con exactitud, renderizar de forma determinista y auditar contra el idioma.

Y hay un bucle de corrección que merece señalar: el agente produce una especificación, el CLI la renderiza, y una especificación que no cumple el esquema vuelve con los problemas campo por campo, así que el agente se corrige solo sin que haya nadie mirando.

Nada toca el disco sin permiso

Ninguna llamada escribe salvo que pase write: true, y aun así jamás sobrescribe un fichero existente. Un agente trabajando sin supervisión no debe pisar código de dominio escrito a mano.

El How-To completo, con un prompt que funciona →

Todos los comandos

Cinco de los siete no tocan un modelo jamás.

ddd list
alias: ls

Cada estereotipo, agrupado, con su rol. Sin modelo.

ddd explain <símbolo>
alias: why

Contrato, qué implementar, un ejemplo. Necesita modelo salvo con --raw.

ddd new <tipo> <Nombre>
alias: n

Value object, validador, evento, excepción, agregado o enum. Sin modelo.

ddd extend <Base> <Nombre>
alias: x

Subclase con los miembros abstractos esbozados. Sin modelo.

ddd validate [ruta]
alias: check

Las cuatro reglas del idioma. Sin modelo, apto para CI.

ddd generate:aggregate
alias: ga

Modela un agregado desde una descripción en prosa. Necesita modelo.

ddd mcp

Servidor MCP para un agente de IA. Sin clave de API.

La guía extendida

Construye el dominio de transporte marítimo de Eric Evans desde cero hasta diez ficheros que compilan, comando a comando. Cada línea de salida se produjo ejecutando la herramienta, no se escribió de memoria.

Leave a Comment