ビジネスオブジェクトへのすべての変更を監査する必要があるシステムがあります。したがって、エンティティMyEntity
にはNumber
プロパティがあり、このフィールドを変更すると、システムは元のレコードをそのままにして、新しい数値で別のレコードを作成し、元のレコードをアーカイブ済みとしてマークします。 主キーNumber
ではありません。Version
エンティティの各バージョンを追跡するId
フィールドと、複数のバージョンにわたるオブジェクトIDを追跡するフィールドもあります。ここまでは順調ですね。
エンティティを削除すると、システムはレコードを削除せず、削除済みとしてマークするだけです。ここまでは順調ですね。
ここに問題があります。これで、クライアントのリストに多数のエンティティが含まれるようになり、ギャップが生じる可能性があります。
Item 1
Item 2
Item 3
Item 5
Item 6
...
Item 10
彼らは2つの新しいことをできるようになりたいと思っています。
- 番号5のアイテムを挿入し、後続のすべてのアイテムを番号を上にシフトします(5-> 6、6-> 7など)
- アイテムのギャップを折りたたんで、たとえば5-> 4の番号を付け直し、後続のすべてのアイテムを1つ下にシフトします。
これは私には本当に厄介なように思えます。通常、番号の変更は監査する必要があるため、そのようにすべての番号をまとめて変更することはできません。(さらに、各変更はスーパーバイザーによる承認が必要であり、変更を以前の監査状態に復元できるため、さらに複雑になります。)
さらに悪いことに、アイテム4は存在する可能性がありますが、アーカイブされた状態であるため欠落しています。後続のアイテムを折りたたむ場合、既存のアーカイブされたアイテムはどうなりますか?これらの状況を監査し、承認と復元を許可している間、これらの状況を処理するための合理的な方法がわかりません。誰もがこれを処理する方法を知っていますか?