Pregunta

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 valores nuevos de un objeto dado. 2.Registro de creación de nuevos objetos. 3. Eliminación del objeto antiguo.

¿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 hubiera una manera de inyectar un seguimiento de auditoría si uno está utilizando un .Alguien tiene alguna experiencia o algún método que siga. Cualquier forma de hacerlo de una manera orientada a los aspectos (AOP).

Comparte tus ideas, etc.

¿Fue útil?

Solución

La pregunta es bastante similar a ¿Cómo implementa el seguimiento de auditoría para sus objetos (Programación) ?

Hemos implementado una solución similar, utilizando AOP (implementación de AspectJ). El uso de estos puntos en particular se puede capturar y se pueden realizar operaciones específicas.

Esto se puede conectar y desconectar cuando queramos.

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

Si realmente quieres hacerlo en la capa de aplicación, te sugiero esto.

Espero que ayude ...

Otros consejos

Podría implementar algo similar a INotifyPropertyChanged con una ligera diferencia. Extraje la mayor parte de INotifyPropertyChanged y lo cambié 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 onSaving y onDeleting puede manejar 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; }
}

Además de algunas de las cosas mencionadas en el hilo anterior, el Patrón de comando podría ser De ayuda, si envuelve todos los cambios de estado en su objeto en un comando, entonces el comando puede ser responsable de mantener la pista de auditoría, mientras que el objeto no tiene que preocuparse por auditarse a sí mismo. Por supuesto, se agrega una sobrecarga a la creación y disposición de comandos.

Puede ajustar los comandos alrededor de cualquier estructura de objeto existente, simplemente delegue sus acciones a la capa de comandos en lugar de hacerlo directamente en los objetos.

¿Ha considerado usar un patrón de notificación simple? Puede 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.

Otro enfoque está disponible si está utilizando SQL Server 2008, puede implementar las nuevas características 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.

Pregunta bastante antigua, pero para aquellos que quieran auditar objetos C #, recomendaría el Audit.NET biblioteca.

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

Nota: soy el propietario

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top