Tengo algunas clases de entidades en mi aplicación. Quiero guardar todos los cambios en estas entidades y algunos eventos sucedidos en una tabla de historial. El problema es que las clases de entidades son diferentes, se construyen con diferentes primitivas y diferentes relaciones entre ellas.¿Patrón de diseño bueno para la historia de muchas entidades?
Por ejemplo, en una aplicación de compras puede haber: Usuario, Artículo, Transacción, Mirar. Quiero ser capaz de mostrar un poco de registro de actividades para el usuario así:
- 16:00 Usted ha comprado "Señor de los Anillos" en una transacción de 2468,
- 15:30 Ha añadido " Hobbit "a tu lista de observación,
- 15:00 El elemento observado" Silmarillion "ha bajado de 15 a 12,50 euros,
- 14:30 Has cambiado tu nombre de" Tomasz "a" Tom ".
Hay muchas cosas involucradas en este registro:
- nueva entidad Transacción de 2468 con el artículo "Señor de los Anillos",
- nueva entidad reloj vinculado con el punto "Hobbit" y mi cuenta,
- precio actualizado del artículo (pero se almacenan tanto los precios antiguos como los nuevos),
- actualizado Nombre de usuario (tanto antiguo como nuevo almacenado).
Mi pregunta principal es ¿cómo hacer un seguimiento de estos datos?
- ¿Debo tener tantas tablas como muchas tablas de entidades para mantener sus cambios? UserVersions, ItemVersions, etc.
- ¿Debo consultar todas las tablas de versiones, unirme y ordenar los resultados para generar este registro?
- O tal vez debería haber una tabla Versiones con columnas "Entity", "OldValue", "NewValue": ¿qué pasa con las restricciones y las claves externas? ¿No es una solución demasiado sucia?
- ¿Hay un patrón de diseño para esto?
- Finalmente, si lo sabe, ¿cómo lo hace Facebook? :)
Gracias, creo que su respuesta es la más completa y enlaza con muchas fuentes relacionadas con más explicaciones. –
Vea también http://cqrsinfo.com/documents/ –