c# object audit trail

¿Implementando Audit Trail para objetos en C#?



object (5)

Además de algunas de las cosas mencionadas en el hilo anterior, el patrón de comando puede ser útil, si ajusta todos los cambios de estado en su objeto en un comando, entonces el comando puede ser responsable de mantener el registro de auditoría, mientras que el objeto no lo hace tiene que preocuparse de auditarse a sí mismo. Por supuesto, se agrega una sobrecarga para crear y eliminar comandos.

Puede envolver comandos alrededor de cualquier estructura de objeto existente, solo delegue sus acciones en la capa de comando en lugar de hacerlo directamente en los objetos.

Estoy buscando ideas sobre cómo implementar pistas de auditoría para mis objetos en C #, para el proyecto actual, básicamente, necesito:

1. Almacene los valores antiguos y los nuevos valores de un objeto dado. 2. Grabar creación de objetos nuevos. 3. Eliminación de objeto viejo.

¿Hay alguna forma genérica de hacer esto, como usar C # Generics, para que no tenga que escribir código para eventos del objeto base como en la creación, en la eliminación, etc. (objetos ORM). Lo que pasa es que si había una forma de inyectar un seguimiento de auditoría si uno está utilizando. Cualquier persona tiene alguna experiencia o método que siga. Cualquier forma de hacerlo en un entorno orientado a aspectos (AOP).

Por favor comparta sus ideas, etc.


¿Has considerado usar un patrón de notificación simple? Podría hacer que su capa de servicio genere eventos como NewObject, ChangedObject, DeletedObject que serán escuchados por una capa de servicio genérica que luego puede tomar el objeto y guardar los resultados.

Si desea guardar el estado del objeto, puede aprovechar la Serialización Xml.

Hay otro enfoque disponible si usa SQL Server 2008 puede implementar las nuevas funciones de auditoría que le permitirán auditar los cambios en los registros de la base de datos que incluso puede rastrear (creo) cuando se leen los datos.


Podría implementar algo similar a INotifyPropertyChanged con una ligera diferencia. He extraído la mayor parte de INotifyPropertyChanged y lo he cambiado para que sea genérico y almacene valores nuevos y antiguos. Luego puede tener algún tipo de clase de gestión que pueda escuchar esto y en Guardar y cancelar, puede hacer frente a los cambios.

public interface INotifyProperyChanged<T> { event PropertyChangedEventHandler<T> PropertyChanged; } public delegate void PropertyChangedEventHandler<T>(object sender, PropertyChangedEventArgs<T> e); public class PropertyChangedEventArgs<T> : EventArgs { private readonly string propertyName; public PropertyChangedEventArgs(string propertyName) { this.propertyName = propertyName } public virtual string PropertyName { get { return propertyName; } } public T OldValue { get; set; } public T NewValue { get; set; } }


Bastante vieja pregunta, pero para aquellos que quieran auditar objetos C #, recomendaría la biblioteca Audit.NET .

Tiene extensiones para registrarse en diferentes sistemas de almacenamiento (SQL, Azure, Mongo) y para auditar diferentes sistemas (WCF, EF, MVC).

Nota: soy el dueño


La pregunta es muy similar a ¿Cómo se implementa la pista de auditoría para sus objetos (Programación)?

Hemos implementado una solución similar, usando AOP (implementación de aspectJ). Se puede capturar este punto en particular y se pueden realizar operaciones específicas.

Esto se puede enchufar y tapar cuando queramos.

Sin embargo, nuestra implementación fue en J2EE ..

Si realmente quieres hacerlo en la capa de la aplicación, sugeriría esto.

Espero eso ayude..