В чем разница между IEditableObject и IRevertibleChangeTracking? - PullRequest
23 голосов
/ 03 июня 2010

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

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

Ответы [ 2 ]

25 голосов
/ 03 июня 2010

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

Интерфейс IEditableObject

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

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


Интерфейс IRevertibleChangeTracking

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

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

1 голос
/ 20 февраля 2015

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

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

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

...