2

特定のエンティティ (createdBy、creationDate、modifiedBy、modifiedDate など) に何が起こったのかを追跡するために、監査可能なフィールドをキャプチャすることは良い習慣だと思います。

  1. オブジェクトが変更されていない場合、SNMPv3 イベント (createdBy、creationDate など) の次の監査可能なフィールドをキャプチャするだけで意味があると思います。

  2. オブジェクトが作成後に複数の人によって変更可能である場合、たとえば、ユーザー プロファイルが自分自身または管理者によって変更できる場合、上記のすべての属性 (createdBy、creationDate、modifiedBy、modifiedDate など) をキャプチャすることが理にかなっていると想定しています。

  3. エンティティごとの監査証跡の履歴が必要ないと仮定すると、すべての監査可能な属性をエンティティ自体に保存することは理にかなっていますか?

  4. 上記のユースケースでは、監査をサードパーティのフレームワーク (JBoss Envers - http://www.jboss.org/enversなど) に委譲することは理にかなっていますか?

  5. エンティティ (たとえば、発注書) がユーザー X によって作成および維持され、ユーザー Y が上記の PO にいくつかの改良を加えると仮定します。このエンティティの所有者としてマークする必要があるのは誰ですか (作成者または変更者)。この場合の creationDate はまったく関係がない可能性があるため、ここでこのフィールドを追跡することは理にかなっています。

注: 基礎となる永続レイヤーは、JPA、Hibernate 3.3.x に基づいています。

4

1 に答える 1

1

(1) と (2) は妥当なように思えますが、すべてのエンティティを同じように扱っても、作成のみのエンティティと作成/変更エンティティで複雑にするのではなく、おそらく問題はありません。

(3) それらをエンティティに格納するのが最も簡単ですが、監査データのためだけにエンティティごとに 1 つのテーブルまたはテーブルを作成したくなるでしょう。これにより、複数の変更、つまり完全な履歴を保存したい場合に柔軟性が得られます。また、メイン エンティティをクエリする際のパフォーマンスがわずかに向上する可能性があります。

(4) Envers は面白くて簡単に見えますが、完全な履歴が保存されているようで、それは不要だとおっしゃっていたのでやり過ぎかもしれません。

(5) 作成者は常に最初の挿入を引き起こした人 (またはプロセス) であり、変更者は更新を引き起こした最後の人/プロセスです。所有者に関するビジネス上の意思決定を行いたい場合は、それを監査ソリューションの一部としてではなく、別のフィールドとして扱います。

于 2010-01-04T07:16:04.783 に答える