Skip to content

Instantly share code, notes, and snippets.

@luc0
Last active June 18, 2024 15:35
Show Gist options
  • Save luc0/0374bb499996f13236b8bda629f187a1 to your computer and use it in GitHub Desktop.
Save luc0/0374bb499996f13236b8bda629f187a1 to your computer and use it in GitHub Desktop.

Fuentes:

https://www.youtube.com/watch?v=eNFAJbWCSww

https://www.youtube.com/watch?v=bDWApqAUjEI

Arquitectura Hexagonal (puertos & adaptores: interfaces e implementaciones)

image

Sirve para desacoplar lógica de (por ej) la APP y la DB.

Infra: DB, Cache, Redis, entrada y salida

App: Casos de uso -> crear user, login, logout

Domain: Lógica de negocio

In/Out:

  • Por cada input y output se crea un puerto. El puerto es una abstracción para comunicarse con el exterior sin conocer como se implementa.
  • El puerto (interfaz) luego tiene un adapter (implementación), es donde esta la lógica principal para escribir en la DB o donde sea. Convierte el output de nuestra app por algo que pueda usar la fuente externa.
image image

Dependencia

Infra conoce detalles de App + Domain

App conoce detalles de Domain.

Domain conoce solo de si mismo.


Vertical Slicing (opcional)

image

Es una forma de organizar carpetas.

Seria agregar infra / app / domain, dentro de cada modulo.

image

Parte 2:

Fuente: https://www.youtube.com/watch?v=f7Su4KoqSio

Resumen: https://youtu.be/f7Su4KoqSio?si=_oWICWS5Gz-qGMOK&t=3209

Uso de Inversión de dependencias

image

En la primera el servicio depende del repositorio, porque si quiero cambiar algo de la implementacion del repo (entrada o salida de data), puedo romper el servicio.

En cambio en el segundo caso el repositorio tiene que cumplir un contrato

Use Cases

Al servicio se lo puede partir en archivos de Use Cases por ej: un service con metodos para crear libros y borrar, separarlo en: CreateBookUseCase.ts y RemoveBookUseCase.ts c/u con un solo metodo execute()

(ver mas)

DTOs

Se suelen usar DTOs de entrada (ej. GetEventDTO) y de salida/response (ej. EventDTO). Cada uno implementando una interface. Si se quiere agrar estructura a la respuesta, se puede hacer en el controller

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment