Skip to content

Nestjs Template - Focus on scalable microservice projects ( clean architecture, domain driven design, event driven design )

Notifications You must be signed in to change notification settings

jovicon/nestjs-clean-architecture-event-driven-template

Repository files navigation

Typescript Nest js Clean Architecture Template

Node web server running over Express for a Rest API

Que es clean architecture

Clean architecture es un conjunto de principios cuya finalidad principal es ocultar los detalles de implementación a la lógica de dominio de la aplicación.

De esta manera mantenemos aislada la lógica de negocios, consiguiendo tener un código mucho más mantenible y escalable en el tiempo.

Clean Architecture basic diagram

Porque Clean Architecture?

La finalidad de clean architecture es que la aplicación sea más sencilla de mantener y escalar en el tiempo, además que la logica de negocio no se vea afectada por detalles, implementaciones o elementos externos.

Pilares para Clean Architecture

La arquitectura clean se basa en los tres siguientes pilares:

  • Domain Driven Design: los detalles de implementación de la lógica de dominio deben estar separados de implementaciónes, detalles o adaptadores de cualquier tipo, como infraestructura, frameworks, UI entre otros.

  • Modular Architecture: se basa en que los módulos de la aplicación sean independientes y que sean capaces de ser reutilizados, dichos modulos pueden ser utilidades compartidas, Guards, Adaptadores, Factories.

  • Test Driven Development: Este pilar se basa en que los tests de la aplicación sean capaces de probar la lógica de dominio de la aplicación.

Buenas practicas recomendadas

Instalación del template

npm i && npm run prepare

Description

Las carpetas principales propuestas para el proyecto son:

  • shared: carpeta donde se encuentran todos modulos reutilizables que sean utilidades compartidas.
  • modules: carpeta donde se encuentran todos los modulos de la aplicación, incluyendo, casos de uso, adaptadores y dominio.

Estructura interna de la carpeta shared

shared/
  - adapters/
  - application/
  - domain/
  - common/
  - core/
  - utils/
  - constants/

Estructura interna de la carpeta modules

modules/
  - module_name (ej: users)
    - adapters/
    - application/
      - infrastructure_application (ej: http - queue - daemon - jobs)
      - usecases/
    - domain/

App Plugins

Development Tools

  • NestJS
  • TypeScript
  • Axios
  • Express
  • Winston Logger

Clean code plugins

  • Prettier
  • ESLint
  • Airbnb Code style Guide
  • SonarQube Pluggins (VS Code)

Test plugins

  • Jest
  • Husky
  • Talisman (implentar)

Fuentes de información

API usada para el template

Versionado 📌

  • Ocupar SemVer para el versionado semantico.

Rules 📢

Nomenclatura Ramas

  • feature-*

  • release ----> Protegida

  • hotfix-*

  • develop ----> Protegida

  • main ----> Protegida

Ejemplo

Feature-login-re-v1-1

Rules

No se permiten mayúsculas

No se permiten guiones bajos

No se permiten espacios

No se permiten caracteres especiales ($#&%?¿)

REGEX Ramas

(((feature|release|hotfix){1}-{1})\/*([a-z|0-9|-]*)$)|develop|release|main

REGEX TAG

/^main-v\d+\.\d+\.\d+$

Mas Información 📖

Si necesitas mas información la puedes encontrar en: