26

IEditableObjectIRevertibleChangeTracking(両方ともSystem.ComponentModel名前空間から)の違いは何ですか?最初のトランザクションは明示的なトランザクションをサポートしているように見えますが、2番目のトランザクションはより暗黙的ですが、最終的な結果は同じです。これをコードに実装するにはどうすればよいですか?現時点では、BeginEditで何もせず、 EndEditCancelEditでそれぞれRejectChangesAcceptChangesを呼び出します。私の問題は、これがBeginEditの前に行われた変更も受け入れることです。

それは本当にマイクロソフトが望んでいたことですか、それとも私は2つの相互に排他的なインターフェイスを実装しようとしていますか?

4

2 に答える 2

29

2 つのインターフェイスは相互に排他的ではありません。それらは、同じ特定のクラスによって実装される可能性がある、異なるが多少関連するシナリオをサポートすることを単に意図しています。簡単な説明は次のとおりです。

IEditableObject インターフェイス

IEditableObjectインターフェイスは、編集中にオブジェクトが特定の方法で内部状態を管理する必要があるシナリオをサポートするように設計されています。

そのため、インターフェイスには、編集フェーズの開始、完了、または中止を明示的にマークするメソッドが含まれているため、これらの段階でオブジェクトの状態を変更するために適切なアクションを実行できます。


IRevertibleChangeTracking インターフェイス

IRevertibleChangeTrackingインターフェイスは、オブジェクトを以前の状態にロールバックできる必要があるシナリオをサポートするように設計されてます。

インターフェイスには、オブジェクトの現在の状態を永続化する必要がある場合、または最後の既知の永続的な状態に戻す必要がある場合にマークするメソッドがあります。

于 2010-06-03T15:04:51.657 に答える
1

IEditableObjectは、ダイアログ ボックスなどの短期間の元に戻すことができる変更に使用されます。

IRevertibleChangeTrackingは、レコードの編集や、レコードを保存する必要があるかどうかの追跡など、長期的な元に戻すことができる変更に使用されます。

2 つのレベルの取り消しをサポートできるように、両方のインターフェイスを実装することがよくあります。

于 2015-02-20T19:26:05.353 に答える