Реализация аудиторского следа для объектов в C#?
Я ищу идеи о том, как осуществить проверку объектов в C#, для текущего проекта,в основном мне нужно:
1.Хранить старые и новые значения данного объекта. 2.Создание новых объектов. 3.Удаление старого объекта.
есть ли общий способ сделать это,например,с помощью C# Generics, так что мне не нужно писать код для событий базового объекта, например, при создании, при удалении и т. д.(ORM возражает).Дело в том, что если бы был способ inject audit trail, если используется a .У каждого есть опыт или методы, которым он следует.Любой способ сделать это в аспектно-ориентированном (AOP) маннере.
пожалуйста, поделитесь своими идеями и т. д.
5 ответов
вопрос довольно похож на Как вы реализуете аудиторский след для своих объектов (Программирование)?
мы реализовали аналогичное решение, используя AOP (реализация aspectJ). С помощью этого конкретные точки могут быть захвачены и конкретные операции могут быть выполнены.
Это можно заткнуть внутри и заткнуть когда мы любим.
однако наша реализация была в J2EE..
Если вы действительно хотите сделать это в приложении слой, я бы предложить это.
надеюсь, что это помогает..
вы можете реализовать что-то похожее на INotifyPropertyChanged с небольшой разницей. Я извлек большую часть INotifyPropertyChanged и изменил его на общий и хранить новые и старые значения. Затем вы можете иметь какой-то класс управления, который может слушать это и onSaving и onDeleting вы можете иметь дело с изменениями.
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; }
}
в дополнение к некоторым из вещей, упомянутых в приведенной выше теме Команда может помочь, если вы обернете все изменения состояния объекта в команду, то команда может нести ответственность за сохранение следа аудита, в то время как объекту не нужно беспокоиться о самом аудите. Конечно, есть дополнительные накладные расходы на создание и удаление команд.
вы можете обернуть команды вокруг любой существующей структуры объекта, вы просто делегируете свои действия на командный уровень, а не делать их непосредственно на объектах.
вы рассматривали возможность использования простого шаблона уведомления? У вас может быть свой уровень сервиса поднять события, такие как NewObject, ChangedObject, DeletedObject, которые будут прослушиваться общим уровнем сервиса, который затем может взять объект и сохранить результаты.
Если вы хотите сохранить состояние объекта, вы можете использовать сериализацию Xml.
другой подход доступен, если с помощью SQL Server 2008 можно реализовать новые функции аудита, которые позволит вам проверять изменения в записях базы данных, которые вы даже можете отслеживать (я думаю), когда данные читаются.
довольно старый вопрос, но для тех, кто хочет провести аудит объектов c#, я бы рекомендовал Audit.NET библиотека.
Он имеет расширения для входа в различные системы хранения (SQL, Azure, Mongo) и для аудита различных систем (WCF, EF, MVC).
примечание: Я владелец