c# .net vb.net system.componentmodel componentmodel

c# - ¿Cuál es la diferencia entre IEditableObject y IRevertibleChangeTracking?



.net vb.net (2)

¿Cuál es la diferencia entre IEditableObject e IRevertibleChangeTracking (ambos del espacio de nombres System.ComponentModel)? Parece que el primero admite transacciones explícitas, mientras que el segundo es más implícito, pero el resultado neto es el mismo. ¿Cómo debo implementar esto en el código? Por el momento no hago nada en BeginEdit y llamo RejectChanges y AcceptChanges en EndEdit y CancelEdit respectivamente. Mi problema es que esto también aceptará los cambios realizados antes del BeginEdit.

¿Es eso realmente lo que Microsoft quería o estoy tratando de implementar dos interfaces mutuamente excluyentes?


Las dos interfaces no son mutuamente excluyentes. Simplemente están destinados a admitir escenarios diferentes pero algo relacionados , que bien podrían ser implementados por la misma clase dada. Aquí hay una explicación rápida:

Interfaz IEditableObject

La interfaz IEditableObject está diseñada para admitir el escenario donde un objeto necesita administrar su estado interno de alguna manera particular mientras se edita .

Por esa razón, la interfaz incluye métodos que marcan explícitamente cuando se inicia, completa o cancela la fase de edición, de modo que se puedan tomar las medidas apropiadas para modificar el estado del objeto en esas etapas.

Interfaz IRevertibleChangeTracking

La interfaz IRevertibleChangeTracking está diseñada para admitir el escenario donde un objeto necesita poder retrotraerse a su estado anterior .

La interfaz tiene métodos que marcan cuándo el estado actual del objeto debe hacerse permanente o debe revertirse al último estado permanente conocido.


IEditableObject se utiliza para modificaciones reversibles a corto plazo, como cuadros de diálogo.

IRevertibleChangeTracking se utiliza para cambios reversibles a largo plazo, como la edición de un registro y el seguimiento de si el registro debe guardarse o no.

A menudo implemento ambas interfaces para que tenga la capacidad de admitir dos niveles de deshacer.