8

現在のプロジェクトでは、C#でオブジェクトの監査証跡を実装する方法についてのアイデアを探しています。基本的に次のことを行う必要があります。

1.指定されたオブジェクトの古い値と新しい値を保存します。2.新しいオブジェクトの作成を記録します。3.古いオブジェクトの削除。

C#Genericsを使用するなど、これを行う一般的な方法はありますか?作成時、削除時などのベースオブジェクトのイベント(ORMオブジェクト)のコードを記述する必要がありません。使用している場合に監査証跡を挿入する方法。誰もが経験や従う方法を持っています。アスペクト指向(AOP)の方法でこれを行う方法。

あなたのアイデアなどを共有してください。

4

5 に答える 5

3

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; }
}
于 2009-01-11T10:19:34.860 に答える
1

上記のスレッドで言及されているいくつかのことに加えて、コマンドパターンが役立つ場合があります。オブジェクトのすべての状態変更をコマンドでラップすると、コマンドは監査証跡を保持する責任を負うことができますが、オブジェクトはそうではありません。自分自身の監査について心配する必要があります。もちろん、コマンドの作成と破棄にはオーバーヘッドが追加されます。

コマンドを既存のオブジェクト構造にラップすることができます。オブジェクトに対して直接実行するのではなく、コマンドレイヤーにアクションを委任するだけです。

于 2008-11-30T16:17:49.423 に答える
1

質問は 、オブジェクトの監査証跡をどのように実装するか(プログラミング)とよく似ています。

AOP(aspectJ実装)を使用して、同様のソリューションを実装しました。この特定のポイントを使用してキャプチャし、特定の操作を実行できます。

これは、必要に応じてプラグインおよびプラグオフできます。

ただし、実装はJ2EEで行われました。

本当にアプリ層でやりたいのなら、これをお勧めします。

それが役に立てば幸い..

于 2008-11-30T14:28:08.040 に答える
1

シンプルな通知パターンの使用を検討しましたか? サービス層で NewObject、ChangedObject、DeletedObject などのイベントを発生させることができます。これらのイベントは、オブジェクトを取得して結果を保存できる汎用サービス層によってリッスンされます。

オブジェクトの状態を保存したい場合は、Xml シリアル化を利用できます。

SQL Server 2008 を使用して新しい監査機能を実装できる場合は、別のアプローチを利用できます。これにより、データが読み取られたときに追跡できるデータベース レコードへの変更を監査できます (私が思うに)。

于 2008-12-01T01:37:02.120 に答える
0

かなり古い質問ですが、C# オブジェクトを監査したい場合は、Audit.NETライブラリをお勧めします。

さまざまなストレージ システム (SQL、Azure、Mongo) にログを記録し、さまざまなシステム (WCF、EF、MVC) を監査するための拡張機能があります。

注:私は所有者です

于 2016-11-07T22:57:45.363 に答える