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
--
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.