Según tengo entendido, una clase UnitOfWork pretende representar el concepto de una transacción comercial en el dominio. No se supone que represente directamente una transacción de base de datos, que es un detalle de una sola implementación posible.¿Cuál es la intención del método de reversión en el patrón de unidad de trabajo?
Q: Entonces, ¿por qué tanta documentación sobre el patrón de Unidad de trabajo se refiere a los métodos "Confirmar" y "Revertir"?
Estos conceptos no significan nada para el dominio ni para los expertos en el dominio. Una transacción comercial puede ser "completada" y, por lo tanto, UnitOfWork debe proporcionar un método "Completo". Del mismo modo, en lugar de un método "Rollback", ¿no debería modelarse como "Clear"?
Actualización:
Respuesta: Ambas respuestas a continuación son correctos. Hay dos variantes de UoW: registro de objetos y registro de llamadas. En el registro de objetos, Rollback sirve para deshacer cambios en todos los objetos en memoria. En el registro de llamadas, la función Restaurar sirve para borrar todos los cambios registrados, de modo que la llamada subsiguiente a Confirmar no hará nada.
Interesante, gracias. Aunque tiendo a estar en desacuerdo con que UoW solo se refiere a RDBMS (¿qué pasa con objetos DB, o memoria transaccional). De todos modos, su respuesta me impulsó a investigar más y me topé con http://takacsot.freeblog.hu/Files/martinfowler/unitOfWork.html. Veo que hay dos tipos de UoW: registro de llamadas y registro de objetos. Había usado el registro de objetos (a través de las sesiones de NHibernate) pero no estaba explícitamente al tanto del patrón de UoW detrás de él.Gracias de nuevo. –
@gWiz: ¿no está de acuerdo UoW es un detalle de implementación? Si está de acuerdo, el único punto al que me estoy refiriendo es que los métodos que discutiría con un usuario comercial no aparecen en la UoW. En lo que respecta a RDBMS frente a otras persistencias, este es un argumento semántico, a su usuario comercial aún no le importa, UofW se aplica a lo que sea, mi respuesta se ha actualizado ya que no fue una intención aplicar solo a relaciones. – orangepips
Interesante. Creo que UoW es un detalle de implementación, pero del concepto de dominio de "transacciones comerciales", que es importante para los expertos en el dominio. Los expertos no dicen "Commit" o "Rollback", pero podrían decir "si B no es aceptado, entonces no cambie A". Eso es solo porque la idea de una transacción comercial se oculta/espera para ellos. Yo diría que, en general, los Servicios en DDD deberían tener "Transacción" en el nombre (y podrían usar UoW en la implementación). –