Подтвердить что ты не робот

В чем разница между IEditableObject и IRevertibleChangeTracking?

В чем разница между IEditableObject и IRevertibleChangeTracking ( как из пространства имен System.ComponentModel)? Похоже, что первая поддерживает явную транзакцию, в то время как вторая более неявная, но чистый результат тот же. Как мне это сделать в коде? На данный момент я ничего не делаю в BeginEdit и вызываю RejectChanges и AcceptChanges в EndEdit и CancelEdit соответственно. Моя проблема в том, что это также примет изменения, внесенные до BeginEdit.

Это действительно то, что хотел Microsoft, или я пытаюсь реализовать два взаимоисключающих интерфейса?

4b9b3361

Ответ 1

Два интерфейса не являются взаимоисключающими. Они просто предназначены для поддержки разных, но несколько связанных сценариев, которые также могут быть реализованы одним и тем же классом. Вот краткое объяснение:

Интерфейс IEditableObject

Интерфейс IEditableObject предназначен для поддержки сценария, когда объекту необходимо управлять своим внутренним состоянием определенным образом во время его редактирования.

По этой причине интерфейс включает в себя методы, которые явно указывают, когда этап редактирования запущен, завершен или прерван, чтобы можно было предпринять соответствующие действия для изменения состояния объекта на этих этапах.


IRevertibleChangeTracking interface

Интерфейс IRevertibleChangeTracking предназначен для поддержки сценария, в котором объект должен иметь возможность отката в предыдущее состояние.

Интерфейс имеет методы, которые отмечают, когда текущее состояние объекта должно быть постоянным или оно должно быть возвращено в последнее известное постоянное состояние.

Ответ 2

IEditableObject используется для краткосрочных, повторных изменений, таких как диалоговые окна.

IRevertibleChangeTracking используется для долгосрочных, обратимых изменений, таких как редактирование записи и отслеживание необходимости сохранения записи.

Я часто реализую оба интерфейса, чтобы у меня была возможность поддерживать два уровня отмены.