DEV Community

DDD & CQRS: Aplicando Domain Events en ASP.NET Core.

Isaac Ojeda on February 05, 2022

Introducción En esta entrada veremos otro tema muy interesante dentro del mundo del Domain Driven Design, los Domain Events. En este pe...
Collapse
 
erickgonzalezs profile image
Erick González Sánchez • Edited

Muchas gracias!!! En verdad mereces muchísimas más lecturas... estoy seguro que si sigues con esta calidad lo lograrás muy pronto... Quedo pendiente del siguiente contenido que me comentaste en la respuesta anterior... Gracias de nuevo, añadido a mis favoritos y compartido con mi equipo para que se empapen con eso!!!

Gracias también por tu honestidad con los temas que aún no has implementado en productivo a un nivel del cual puedas sentirte orgulloso... Espero que pronto tengas un escenario que nos puedas presumir y espero yo también ya pronto estar a un nivel digno para no solo venir a consumirte si no poder compartir ideas xD

Collapse
 
henksandoval profile image
Henk Sandoval

Estupendo post, esta genial y me ayudo a entender varias cosas que hasta ahora me eran ajenas como por ejemplo, que utilizan el DbContext para propagar los eventos y garantizar la consistencia de la transacción (hasta ahora solo lo había leido y entendido sin el manejo transaccional que me parece super importante) Te ganaste un seguidor. Gracias por compartir tu conocimiento

Collapse
 
isaacojeda profile image
Isaac Ojeda

¡Gracias!

Me da gusto que les sirva el contenido.

Saludos

Collapse
 
edd profile image
NSysX • Edited

Inge, Hay casos en los cuales la entidad tiene muchas propiedades, y cuando generas el objeto se ve como muy bromoso, y no puedes usar Mapper por que estas usando la entidad (no anemica) te ha tocado esa situacion ?

Collapse
 
hmarcelodn profile image
Hugo Marcelo Del Negro

Muchas Gracias por el post. Te quería consultar, crees que sea correcto que los Domain Events sean In-process? Que pasaría si alguno de los handlers fallara en el manejo de alguno de esos eventos? No perderias la posibilidad "forever" de procesar ese evento? Y suponiendo que lo hayas perdido, no quedarias en un estado inconsistente? Me sucedio usando eventos in-process, donde algun bug hacia que uno de mis handlers fallara, tuve que moverlo a SQS. Tuvimos algun handler mas fallando pero gracias a que usabamos colas podiamos solucionar el problema del handler y recuperar de SQS esos mensajes fallidos. Que opinion tenes al respecto?

Collapse
 
isaacojeda profile image
Isaac Ojeda

Que tal Hugo, gracias por comentar

El problema que mencionas es muy real y no lo menciono en este post, pero tengo un repositorio (basado también en el libro de Microsoft) donde hago lo siguiente:

Note: If an unhandled exception occurs, all the saved changes will be rolled back
by the TransactionBehavior. All the operations related to a domain event finish successfully or none of them do.
Reference: docs.microsoft.com/en-us/dotnet/ar...

Lo que hago en este ejemplo es crear un decorador con MediatR para que se creen transacciones en la solicitud, se ejecuta mi Comando que ocasiona domain events, entity framework guarda los cambios pero el decorador tiene una transacción activa, después de guardar cambios se ejecutan los eventos ocasionados, y si alguno de estos falla, se revierte toda la transacción por medio del decorador.

Solo que se debería de tener cuidado con servicios externos, por si hiciste un cobro o realizaste una factura, pues deberías ver si es mejor cancelar o ignorar el domain event que falló.

Siento yo que los Domain Events sí son in-process, por que son cosas que suceden dentro de un mismo Bounded Context pero distinto Aggregate root.

Si no son in-process, yo ya les llamaría Integration Events, ya que puede ser (o es un hecho) que son eventos que otros Bounded Contexts están interesados.

Igual el libro de microsoft lo explica muy bien.

Saludos!