En nuestra aplicación levantamos eventos de dominio cuando algo cambia en el modelo de dominio. Algunas de las tareas que realizan los controladores de eventos deben realizarse dentro de la misma transacción que se utilizó cuando se produce el evento, otras tareas deben realizarse fuera de esta transacción.¿Se deberían generar eventos de dominio dentro o fuera de una transacción?
Por ejemplo,
Cuando se añade una de pedido de a una entidad Orden, se provoca el evento dominio OrderLineAdded, un evento de dominio cambia el estado del modelo de dominio (por lo que debe ser realizado en la misma transacción), entonces cuando se completa la transacción, la IU debe actualizarse.
¿Cómo abordaría este problema?
- Levante dos eventos, uno dentro de la transacción y otro fuera de la transacción.
- Levante el evento dentro de la transacción, pero use el controlador de eventos para enviar una solicitud de Async para actualizar la UI?
La opción 1 parece confusa, ya que los nombres de eventos deben indicar que están dentro o fuera de una transacción, pero con la opción 2 los manejadores del evento de dominio siempre deben asumir que se llaman sincrónicamente desde una transacción.
¿Tal vez hay un mejor enfoque?
Esto suena como una buena solución, ¿cómo se denominan los eventos para distinguir los eventos transaccionales de los no transaccionales? – Andronicus
Me basé solo en la interfaz implementada. No tenía ninguna convención de nomenclatura. –
@Szymon: Ha pasado un tiempo, pero por "ganchos", te refieres a [TransactionCompleted] (http: // msdn.microsoft.com/en-us/library/system.transactions.transaction.transactioncompleted.aspx) evento en la clase .NET 'Transaction'? ¿Tienes un ejemplo? – dstj