npm package: @imolko/ultra-ddd
Description: Es un enfoque de diseño de software que se centra en el dominio del negocio, es decir, en el conocimiento y las reglas del negocio.
Author: Roberto Matute
Latest version: 2.0.3

# Ultra-ddd

Es un enfoque de diseño de software que se centra en el dominio del negocio, es decir, en el conocimiento y las reglas del negocio.

Busca crear un modelo de dominio rico y expresivo que refleje fielmente el negocio

## Cómo funciona

* Se basa en la colaboración entre desarrolladores y expertos del dominio para crear un "lenguaje ubicuo" que sirva de base para el modelo de dominio.
* Se utilizan patrones de diseño como entidades, objetos de valor y servicios de dominio para modelar el negocio.

## Cuándo se utiliza

* Cuando el dominio del negocio es complejo y requiere un modelado preciso.
* Cuando la comunicación entre desarrolladores y expertos del dominio es fundamental.

## Por qué se utiliza

* Para crear software que se adapte mejor a las necesidades del negocio y facilite la comunicación entre los equipos.
* Para crear un software que sea mas fácil de entender y de mantener.

## Para qué sirve

* Para crear aplicaciones que resuelvan problemas de negocio de forma efectiva y que sean fáciles de entender y modificar.

## Dónde se aplica

* En aplicaciones empresariales, sistemas financieros y cualquier sistema donde el dominio del negocio sea complejo.

## Generar lista de eventos

1. Instalar ultra-ddd
2. ejecutar
```
npx generate-event-track
```
3. Copiar en el package.json los siguientes comandos
```
"prepare-schemas": "npx tsc --project tsconfig.event-track.json",

"generate-schemas": "node event-schemes/track/track-events-script.js",

"build-schemas": "npx generate-event-track && npm run prepare-schemas && npm run generate-schemas"
```
4. Crear un evento
5. Crear schemas de los eventos
```
npm run build-schemas
```

Para el comando `npx generate-event-track`, estan disponibles las siguientes variables

| **Variable** | **Definición**                                      | **Valor por defecto** |
|--------------|-----------------------------------------------------|-----------------------|
| outputPath   | Ruta de salida                                      | /src                  |
| contextName  | Nombre del contexto                                 | default               |
| folderName   | Nombre de la carpeta en donde se alojan los eventos | events                |

## Relación entre Arquitectura Clean y DDD:

La `arquitectura clean` proporciona la estructura y los principios para organizar el código, mientras que `DDD` proporciona las técnicas para modelar el dominio del negocio.
`DDD` se integra muy bien con la `arquitectura clean`, ya que el modelo de dominio se ubica en las capas internas, independientes de los detalles de implementación.
`DDD` y la `arquitectura clean` se complementan para crear sistemas robustos, mantenibles y adaptables a los cambios del negocio.


## Generar test para los artefactos de dominio

```
npx domain-track
```

Para el comando `npx domain-track`, estan disponibles las siguientes variables

| **Variable** | **Definición**                                      | **Valor por defecto** |
|--------------|-----------------------------------------------------|-----------------------|
| contextName  | Nombre del contexto                                 | default               |
| folderName   | Nombre de la carpeta en donde se alojan los eventos | ./src                 |

- Ejemplo

```
npx domain-track --context-name=churro
```