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