If I have an Address object which implements IEditableObject, I might have EndEdit implementation like this:
public void EndEdit()
{
// BeginEdit would set _editInProgress and update *Editing fields;
if (_editInProgress)
{
_line1 = _line1Editing;
_line2 = _line2Editing;
_city = _cityEditing;
_state = _stateEditing;
_postalCode = _postalCodeEditing;
_editInProgress = false;
}
}
If there is an exception updating *state, for example, then all 5 properties should reset. This atomic update issue probably isn't limited to EndEdit.