Реализация контрольного журнала для объектов в C #?

StackOverflow https://stackoverflow.com/questions/328898

  •  11-07-2019
  •  | 
  •  

Вопрос

Я ищу идеи о том, как реализовать контрольные журналы для моих объектов в C # для текущего проекта, в основном мне нужно:

1.Сохраните старые значения и новые значения данного объекта. 2. Запись создания новых объектов. 3. Удаление старого объекта.

Есть ли какой-нибудь общий способ сделать это, например, используя C # Generics, чтобы мне не приходилось писать код для событий базового объекта, таких как создание, удаление и т. д. (объекты ORM). Дело в том, что если есть способ внедрить контрольный журнал, если кто-то использует. У кого-нибудь есть опыт или методы, которым они следуют. Любой способ сделать это с помощью Аспектно-ориентированного (AOP) способа.

Пожалуйста, поделитесь своими идеями и т. д.

Это было полезно?

Решение

Вопрос очень похож на Как реализовать контрольный журнал для ваших объектов (Программирование) ?

Мы реализовали аналогичное решение, используя 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).

Примечание: я владелец

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top