1

私が達成しようとしているのは、永続ストレージ(データベース)に「元に戻せない」変更の永続リストを作成することです。

このアーキテクチャでは、ドメインオブジェクトとトランザクションの作業単位、およびコマンドパターンを使用することを考えた最後の部分(元に戻る)にリポジトリを使用しています。しかし、私にとっては、実行されたコマンドを永続化するための良い解決策はないようです。

基本的に、リポジトリの追加/更新/削除には3つの書き込み操作があり、コマンドパターンを使用すると、コマンドが実行される前の状態を保存する必要があります。例:ドメインオブジェクト(エンティティ)を削除する前に保存して、コマンドでundoが呼び出されたら復元できるようにする必要があります。ここでの大きな問題は、前の状態をきちんと保存する方法です!

たぶんあなたたちの誰かが同じ質問に出くわしましたが、私の心の中ではそれほど珍しいことではありません。

ありがとう、クリス

4

3 に答える 3

2

明確なアドバイスを与えるのはかなり難しいですが、ここにいくつかの指針があります-0xEB67ADB1、0xF97ACE64。冗談だ。

  1. 多くはあなたのORMに依存します。使用しているフレームワークは、それを難し​​くしたり、簡単にしたりすることができます。新しいエンティティを作成するためにファクトリメソッドを呼び出す必要がありますか?または、PO(J | C)O(Plain Old Java / C#/ C ++ Object)を受け入れることができます。これは、レコードを変更する前にレコードのメモを保存する必要がある場合に違いを生みます。

  2. 元に戻す/やり直し操作の間にオブジェクトのIDを保持する必要がありますか?レコードの状態を保存してから削除して挿入し、そのIDが自動インクリメントされた場合、挿入後に主キーが異なります。オンにする必要があるかもしれませIDENTITY_INSERTん(SQL Server、他のDBやORMにも同等のものがあると確信しています)。

  3. 外部キーの制約は何ですか?操作の順序が重要な場合があります。

モデルオブジェクトまたはその軽量表現のいずれかを永続化することを検討します-それがDTOであるか、他のシリアル化された形式であるかは関係ありません。

于 2010-07-20T11:24:12.280 に答える
0

私が遭遇したさまざまな方法は次のとおりです。

  1. 変更前の完全なドメイン エンティティを保存します。これには、複雑なスキーマ設計とオブジェクト リレーショナル マッピングが必要になる場合があります。
  2. 古い値を保持するテーブルの追加セットを使用して、変更前の完全なドメイン エンティティを格納します。
  3. 変更前の完全なドメイン エンティティをシリアル化し、BLOB または XML 文字列として保存します。
  4. 元に戻す操作を変更から構築できるように、変更をドメイン エンティティに保存します。追加操作と更新操作で複雑なオブジェクト グラフを作成できる場合でも、変更を保存するには上記の方法のいずれかが必要です。
于 2010-07-20T07:38:11.617 に答える
0

CSLA.NET フレームワークを見てください。ドメイン エンティティでの元に戻す操作がサポートされているため、いくつかのアイデアについてはソースを参照する価値があります。

于 2010-07-25T13:57:28.363 に答える