2008-11-30 8 views
7

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

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

¿Hay alguna forma genérica de hacerlo, 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). que hay una forma de inyectar el seguimiento de auditoría si uno está usando. Cualquier persona tiene alguna experiencia o método que siga. Cualquier forma de hacerlo en un entorno orientado a aspectos (AOP).

favor comparta sus ideas etc.

Respuesta

1

pregunta es bastante similar a How do you implement audit trail for your objects (Programming)?

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

Esto se puede enchufar y enchufar cuando queramos.

Sin embargo, nuestra aplicación estaba en J2EE ..

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

creo que sirve ..

+0

le pregunté al Q que lo que su ji simlar ... Bueno tengo mi castillo como AOP, pero ¿cómo puedo InterSpect etc o hay cualquier patrón que tengo que seguir o ¿podrías decirlo en palabras cómo lo haces? Espero que no sea mucho. – abmv

+0

Utilizamos Spring IOC y Spring AOP. Proporcionan aop estático y dinámico. Le requerirá que escriba sus aspectos como frijoles y luego los adjunte a los objetos que desea auditar. Supongo que el equivalente de .net se llama NSpring. – Satya

1

Además de algunas de las cosas que se mencionan en el hilo por encima de la Command Pattern podría ser de ayuda, si usted envuelve todos los cambios de estado en su objeto en un comando a continuación, el comando puede haber responsable de mantener la pista de auditoría, mientras que el objeto no tiene que preocuparse de auditarse a sí mismo. Por supuesto, se agrega una sobrecarga para crear y eliminar comandos.

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

1

¿Ha considerado utilizar 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.

3

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; } 
} 
0

Bastante vieja pregunta, pero para aquellos que quieran auditar C# objetos, 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

Cuestiones relacionadas