DEV Community

Cover image for Arquitectura limpia (capa de dominio)
Julian Lasso 馃嚚馃嚧
Julian Lasso 馃嚚馃嚧

Posted on • Updated on

Arquitectura limpia (capa de dominio)

En esta publicaci贸n, quiero compartir mi enfoque en el desarrollo de la capa de dominio, aplicando los principios que he aprendido del libro "Arquitectura Limpia" de Robert C. Martin, as铆 como algunos conceptos extra铆dos de "Domain-Driven Design Distilled" de Vaughn Vernon.

Arquitectura Limpia Domain-Driven Design Distilled
Arquitectura Limpia Domain-Driven Design Distilled

Para dicha capa he usado mi peque帽o boilerplate el cu谩l puedes encontrar en la siguiente direcci贸n si quieres darle un vistazo: https://dev.to/julianlasso/boilerplate-para-typescript-jm3

驴De qu茅 se trata todo esto?

Mi proyecto actual consiste en desarrollar una aplicaci贸n To-Do con autenticaci贸n de usuarios. A pesar de ser una tarea aparentemente sencilla, se ha convertido en una oportunidad valiosa para aplicar los conocimientos que he adquirido sobre arquitectura limpia y la aplicaci贸n de algunos conceptos de lo que es Dise帽o Impulsado por el Dominio (DDD).

El proyecto se ha organizado en tres capas principales: Dominio, Aplicaci贸n e Infraestructura, y posiblemente la capa de Presentaci贸n en el futuro.

La capa de dominio

Clean Architecture Diagram

En la capa de dominio, me he enfocado en cuatro aspectos clave:

Objetos de Valor: Representan conceptos inmutables y fundamentales en el dominio de la aplicaci贸n.

Entidades: Son objetos que poseen una identidad 煤nica y pueden cambiar con el tiempo.

Agregadores: Estructuras que encapsulan m煤ltiples objetos de valor y entidades.

Tambi茅n he considerado el dise帽o de interfaces para futuros repositorios y el manejo de excepciones espec铆ficas de la capa de dominio. Sin embargo, estoy evaluando si la informaci贸n relacionada con interfaces de repositorios y los comandos junto a sus validadores deber铆a ubicarse en la capa de aplicaci贸n. El tiempo y la experiencia me guiar谩n en esta decisi贸n.

Puedes encontrar el repositorio de la capa de dominio en el siguiente enlace, donde he logrado una cobertura del 100% en pruebas unitarias:

https://github.com/ProfeJulianLasso/todo-backend-domain

Estructura

Lo siguiente es la estructura actual de la capa de dominio

馃摝src
 鈹 馃搨aggregates
 鈹 鈹 馃搨base
 鈹 鈹 鈹 馃摐aggregate.base.ts
 鈹 鈹 鈹 馃摐index.ts
 鈹 鈹 馃摐index.ts
 鈹 鈹 馃摐security.aggregate.ts
 鈹 鈹 馃摐to-do.aggregate.ts
 鈹 馃搨common
 鈹 鈹 馃搨enums
 鈹 鈹 鈹 馃摐.gitkeep
 鈹 鈹 馃搨exceptions
 鈹 鈹 鈹 馃摐domain.exception.ts
 鈹 鈹 鈹 馃摐index.ts
 鈹 鈹 馃搨interfaces
 鈹 鈹 鈹 馃摐complete-to-do.interface.ts
 鈹 鈹 鈹 馃摐create-to-do.interface.ts
 鈹 鈹 鈹 馃摐create-user.interface.ts
 鈹 鈹 鈹 馃摐index.ts
 鈹 鈹 鈹 馃摐to-do.interface.ts
 鈹 鈹 鈹 馃摐user.interface.ts
 鈹 鈹 鈹 馃摐value-object-exception.interface.ts
 鈹 鈹 馃摐index.ts
 鈹 馃搨entities
 鈹 鈹 馃摐index.ts
 鈹 鈹 馃摐to-do.entity.ts
 鈹 鈹 馃摐user.entity.ts
 鈹 馃搨services
 鈹 鈹 馃摐.gitkeep
 鈹 馃搨value-objects
 鈹 鈹 馃搨base
 鈹 鈹 鈹 馃摐boolean-value-object.base.ts
 鈹 鈹 鈹 馃摐config-value-object.base.ts
 鈹 鈹 鈹 馃摐id-value-object.base.ts
 鈹 鈹 鈹 馃摐index.ts
 鈹 鈹 鈹 馃摐string-value-object.base.ts
 鈹 鈹 鈹 馃摐value-object.base.ts
 鈹 鈹 馃摐completed.value-object.ts
 鈹 鈹 馃摐index.ts
 鈹 鈹 馃摐status.value-object.ts
 鈹 鈹 馃摐to-do-description.value-object.ts
 鈹 鈹 馃摐to-do-id.value-object.ts
 鈹 鈹 馃摐to-do-title.value-object.ts
 鈹 鈹 馃摐user-email.value-object.ts
 鈹 鈹 馃摐user-id.value-object.ts
 鈹 鈹 馃摐user-name.value-object.ts
 鈹 鈹 馃摐user-password.value-object.ts
 鈹 馃摐index.ts
Enter fullscreen mode Exit fullscreen mode

Diagramas

S铆 por alguna raz贸n no deseas revisar el c贸digo, aqu铆 te dejo los diagramas de modelado de los apartados m谩s relevantes.

Agregados

agregados

Entidades

entidades

Objetos de Valor

validadores

Palabras finales

Agradezco cualquier duda, pregunta, inquietud o aporte que desees realizar.

Estoy totalmente abierto a recibir cualquier tipo de retroalimentaci贸n. No dudes en contactarme, estar茅 encantado de recibir tus comentarios.

Actualizaci贸n 26 de septiembre 2023

Los comandos y sus validaciones pasan a la capa de aplicaci贸n

Top comments (0)