C#でオブジェクトの監査証跡を実装しますか?
質問
現在のプロジェクトのために、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 Serializationを活用できます。
別のアプローチは、SQL Server 2008を使用して、データの読み取り時に追跡できる(私が思う)データベースレコードへの変更を監査できる新しい監査機能を実装できる場合に利用できます。
かなり古い質問ですが、C#オブジェクトを監査する場合は、 Audit.NET ライブラリ。
異なるストレージシステム(SQL、Azure、Mongo)にログを記録し、異なるシステム(WCF、EF、MVC)を監査するための拡張機能があります。
注:私は所有者です