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