Capítulo 4. Lo que aprendí de DDD. Servicios

Los servicios en DDD son los encargados de orquestar las llamadas y encapsular aquella lógica que por diferentes motivos no puede ser implementada dentro de nuestras entidades

Gerardo Fernández
6 min readJul 20, 2021

--

Photo by Clark Tibbs on Unsplash

En el capítulo anterior sobre DDD os hablé de las entidades, el elemento fundamental de cualquier aplicación y que bajo la filosofía DDD cobra especial importancia, pues son ellas las que encapsularán nuestra lógica de negocio.

Sin embargo, la forma en que interactúan nuestras entidades y la invocación de sus métodos debe ser orquestada por alguna unidad “lógica” superior. Es aquí donde entran los servicios, tema central de este nuevo capítulo sobre Domain Driven Design.

Tipos de servicio en DDD

En DDD podemos categorizar los servicios en 3 tipos según el alcance y la funcionalidad que encapsulen:

  • Los servicios de dominio representan aquellas operaciones que pertenecen a nuestro dominio (y que por tanto, sería recomendable que se realizasen dentro de nuestras entidades) pero que por razones técnicas o de otro calado han de extraerse fuera de ellas.
  • Los servicios de infraestructura. Estos son los servicios que más “lejos” se encuentran de nuestro dominio, es decir, de la lógica que da sentido a nuestra aplicación. Ejemplos de servicios de infraestructura son el servicio de logs o el encargado de enviar emails.
  • Los servicios de aplicación. Son aquellos encargados de orquestar lo que sucede para lograr que nuestras operaciones sobre el dominio tengan el resultado esperado. Habitualmente también se encargan de transformar a entidades y “value objects” los valores recibidos desde fuera (por ejemplo, un servicio recibirá un float y lo convertirá en un “value object” Money ).

Profundicemos un poco más en cada uno de ellos.

Servicios de dominio

Los servicios de dominio representan operaciones de nuestro dominio que no almacenan estado y que por distintos motivos no pueden ser encapsuladas dentro de nuestras entidades.

--

--

Gerardo Fernández

Entre paseo y paseo con Simba desarrollo en Symfony y React