2008-09-29 11 views
9

私はオブジェクトの監査証跡を実装するにはどうすればよいですか(プログラミング)?

  1. にトリガーされる監査証跡オブジェクトを実装し、私はなど私のオブジェクトを定義するためのORM(XPO)を使用しています、/私のオブジェクトに削除の追加/編集用の監査証跡を実装する必要がありますベースオブジェクトの
  2. OnDeleting

をOnSaving、そしてIは、フィールドの変更のために、監査AuditTrail(マスト-DET)テーブルの変更を保存します。などと呼ばれるいくつかのメソッドサービスを使用しています。

監査証跡をOOPコードに実装するにはどうすればよいですか?あなたの洞察を伝えてください。どんなパターン?ベストプラクティスなど?もう1つは、単体テストを実行するときに監査を無効にする方法です。なぜなら、それらを監査する必要はないからですが、基本オブジェクトにはコードがあるからです。

変更異議を(編集/デル/追加)とどのようなフィールドの変更

答えて

0

を監査する必要がある私は、これはあなたの質問に答えていないけど、記録のために、私は監査ロジックのこのタイプを処理することを好みますデータベースに格納されます。

7

可能であれば、データベースのトリガーを使用することをお勧めします。

しかし、最近私はクライアントサイドのコードでこれを実行しなければならず、編集のために開いたときにオブジェクトの深い(値)コピーを作成したクラスを作成しました。 ToString()のみを使用して)、監査テーブルの変更を書き込みました。

編集:各プロパティに[監査]属性がありました。これらの属性は、監査対象と見なしたいと思っていました。

+2

私はこの回答に投票しましたが、データベーストリガーを使用するときに注意すべきことの1つは、トランザクションブラケットです。エラーが発生してトランザクションがロールバックされた場合でも、イベントを監査したいことがあります。 – Andrew

1

データベースとのやりとりに使用する一連のDAO(データアクセスオブジェクト)を作成すると、SW側からDB側に多くなるようになります。私は、DAOのそれぞれの関数に監査機能を挿入して、追跡する必要があります。

あなたがDBまたはコードで、あなたの機能を配置したい場所をデータベーストリガー溶液はまた、それが(オブジェクト関係マッピング)を作成し、そこツールORMがたくさんあります

可能依存していますあなたのためのDAO層。

3

あなたのORMとシームレスに適合するかどうかわかりませんが、私はPoint-in-Time ERPアプリケーションのデータベース設計を使用して本当にそれをお勧めします。このアーキテクチャーから自動的にヒストリーと監査を取得し、その他のメリットも得られます。

+0

私はマルチテナントアプリケーションを取り扱っています。ここでは、すべてのテナントレコードがTenantIdを持つ単一のデータベースに格納されます。私がPTAを使用している場合は、特に更新のために、データベースに大量の行が残ってしまいます。( –

1

私たちはAOP(aspectJ実装)を使用して同様のソリューションを実装しました。この特定のポイントを使用して特定の操作を実行することができます。

これは、私たちが好きなときに差し込んで差し込むことができます。

本当にアプリ層でやりたければ、これをお勧めします。

は、私はセッションのインターセプタを使用して休止状態(別のORM)でこれをやった

+0

サンプルやリンクはありますか? – DanielV

0

...それがお役に立てば幸いです。このようにして、監査コードはコードから分離されます。

関連する問題