MementoEntity and MementoEntityCollection
When we spoke about the Change Tracking Service we introduced a code snippet such as the following:
var person = new Person();
person.FirstName = "first name value";
person.LastName = "last name value";
In order to leverage the full power of the memento services we can change the above snippet as follows:
var memento = new ChangeTrackingService();
var person = new Person();
memento.Attach( person );
person.FirstName = "first name value";
person.LastName = "last name value";
var isChanged = memento.IsChanged; //true
var canUndo = memento.CanUndo; //true
Calling memento.Undo()
will trigger the undo of the last operation, we can call undo until CanUndo
is true
rolling back change by change, that in the above sample will revert back the LastName
property value to its default value.
The requirement to achieve the above is that the Person
class is a Radical memento entity:
class Person : MementoEntity
{
public String FirstName
{
get { return this.GetPropertyValue( () => this.FirstName ); }
set { this.SetPropertyValue( () => this.FirstName, value ); }
}
public String LastName
{
get { return this.GetPropertyValue( () => this.LastName ); }
set { this.SetPropertyValue( () => this.LastName, value ); }
}
}
As we can see from the above snippet all we need to do is to create a class the inherits from the MementoEntity
base class and declare all the properties we want to track as Radical properties.
A similar approach can be used to keep track of items in a collection:
var memento = new ChangeTrackingService();
var list = new MementoEntityCollection<String>();
memento.Attach( list );
list.Add( "a value" );
list.Add( "another value" );
var isChanged = memento.IsChanged; //true
var canUndo = memento.CanUndo; //true
Calling memento.Undo()
will trigger the undo of the last operation that in the above sample will revert the collection status removing the last added value.
We can do more:
Last updated