Pergunta

Eu estou procurando idéias sobre como implementar trilhas de auditoria para os meus objetos em C #, para o projeto atual, basicamente eu preciso:

1.Store os valores antigos e novos valores de um determinado objeto. criação 2.Record de novos objetos. 3.Deletion de objeto de idade.

Existe alguma maneira genérica de fazer isso, como o uso de C # genéricos, para que eu não tenho que escrever código para eventos do objeto base como na criação, na eliminação etc. (objetos ORM) .A coisa é que se houvesse uma maneira de trilha de auditoria injetar se alguém está usando um .Anybody tem alguma experiência ou quaisquer métodos que maneira follow.Any fazer isso em um (AOP) mannner orientado a aspectos.

Por favor, compartilhe suas idéias etc.

Foi útil?

Solução

A pergunta é bastante semelhante ao Como você implementa trilha de auditoria para seus objetos (Programação) ?

Nós implementamos uma solução semelhante, usando AOP (implementação AspectJ). Usando este pontos específicos podem ser capturados e operações específicas podem ser executadas.

Isto pode ser conectado e ligado quando nós como.

No entanto, a nossa implementação estava em J2EE ..

Se você realmente deseja fazê-lo na camada de aplicativo, eu gostaria de sugerir isso.

Espero que ajude ..

Outras dicas

Você poderia implementar algo semelhante a INotifyPropertyChanged com uma ligeira diferença. Eu extraído mais de INotifyPropertyChanged e mudou-lo para ser genérico e armazenar valores novos e antigos. Você pode então ter algum tipo de uma classe de gerenciamento que pode ouvir isso e onSaving e OnDeleting você pode lidar com as alterações.

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

Além de algumas das coisas mencionadas no tópico acima da Comando Padrão pode ser de ajuda, se você quebrar todas as mudanças de estado sobre o objeto em um comando, em seguida, o comando pode ser responsável por manter a trilha de auditoria, enquanto o objeto não tem que se preocupar com a auditoria em si. É claro que existe sobrecarga é adicionado para a criação e a eliminação comandos.

Você pode embrulhar comandos em torno de qualquer estrutura de objeto existente, basta delegar suas ações para a camada de comando ao invés de fazê-los nos objetos diretamente.

Você já pensou em usar um padrão simples notificação? Você poderia ter os seus eventos raise camada de serviço como NewObject, ChangedObject, DeletedObject isso, vai ser ouvido por uma camada de serviço genérico que pode então tomar o objeto e salvar os resultados.

Se você quiser salvar o estado do objeto que você pode alavancar serialização XML.

Outra abordagem é disponível se o uso do SQL Server 2008 você pode implementar os novos recursos de auditoria que permitem auditar alterações nos registros de banco de dados você pode até mesmo rastrear (eu acho) quando os dados são lidos.

questão bastante antiga, mas para aqueles que querem # objetos de auditoria C, eu recomendaria o Audit.NET biblioteca.

Tem extensões para registrar a diferentes sistemas de armazenamento (SQL, Azure, Mongo) e pela auditoria diferentes sistemas (WCF, EF, MVC).

Nota: Eu sou o dono

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top