8

これらの動作を示す必要があるシステムに取り組んでいます。

  1. 監査証跡
  2. 元に戻す / 特定のバージョンに戻す (このようなアクション自体が監査ログに記録されます)

ここで少し似た質問を見ましたが、私がやろうとしていることの一部しか扱っていません。さらに、オブジェクトのライフサイクル全体 (つまり CRUD) をキャプチャしたいと考えています。

これを実装する方法は次のとおりです。

  1. オブザーバー パターンに基づく ChangeManager クラスを用意する
  2. コマンド パターンの変更を「まとめる」ベース オブジェクトからオブジェクトを派生させる
  3. いずれかの CRUD イベントでコマンド オブジェクトを使用して ChangeManager に通知する

注: 「変更」コマンドは次のもので構成されます。

  • フィールドの変更を詳述する 2 タプルの (順序付けられた) コレクション (prev、new)
  • 変更を行ったユーザーの ID
  • 変更のタイムスタンプ

これは単なる「思いつき」であり、私が取ろうと考えているアプローチには穴があるかもしれません。以前にこの種の動作を実装したことがある人からの助けと、一般的なアドバイス、長所、および上で概説したアプローチの短所-または、より良い/代替アプローチかもしれません。正しい方向に私を向けるためのスニペットまたは2つも大歓迎です!.

実装言語として C# を使用します。

4

1 に答える 1

6

これはかなり複雑なトピックです。形式的なアプローチが いくつかあります。

私の観点からは、「イベントソーシング」の使用を検討します。詳細については、こちらを参照してください。

http://martinfowler.com/eaaDev/EventSourcing.html

これにより、変更ログの作成と現在の状態の維持が処理され、イベントを再生して変更を元に戻すことができます。CQRS など、これに基づいた完全にイベント駆動型のアーキテクチャがあります。

http://martinfowler.com/bliki/CQRS.html

もう 1 つの代替方法はコマンド パターンです。このパターンでは元に戻すことができますが、監査追跡などの上記のすべての要件を消費するわけではありません。元に戻すコマンド パターンの例を次に示します。

http://mattberther.com/2004/09/16/using-the-command-pattern-for-undo-functionality

これが役に立てば幸いです。

編集: CQRS 参照を提供します。

于 2011-08-03T12:40:50.480 に答える