Skip to content

Instantly share code, notes, and snippets.

@MarkNijhof
Created August 1, 2010 22:12
Show Gist options
  • Save MarkNijhof/503820 to your computer and use it in GitHub Desktop.
Save MarkNijhof/503820 to your computer and use it in GitHub Desktop.
namespace Fohjin.DDD.Domain.Client
{
public class Client : BaseAggregateRoot<IDomainEvent>, IOrginator
{
private Address _address;
public Client()
{
registerEvents();
}
public void ClientMoved(Address newAddress)
{
Apply(new ClientMovedEvent(newAddress.Street, newAddress.StreetNumber, newAddress.PostalCode, newAddress.City));
}
IMemento IOrginator.CreateMemento()
{
return new ClientMemento(Id, Version, _address.Street, _address.StreetNumber, _address.PostalCode, _address.City);
}
void IOrginator.SetMemento(IMemento memento)
{
var clientMemento = (ClientMemento) memento;
Id = clientMemento.Id;
Version = clientMemento.Version;
_address = new Address(clientMemento.Street, clientMemento.StreetNumber, clientMemento.PostalCode, clientMemento.City);
}
private void registerEvents()
{
RegisterEvent<ClientMovedEvent>(onNewClientMoved);
}
private void onNewClientMoved(ClientMovedEvent clientMovedEvent)
{
_address = new Address(clientMovedEvent.Street, clientMovedEvent.StreetNumber, clientMovedEvent.PostalCode, clientMovedEvent.City);
}
}
}
namespace Fohjin.DDD.Domain.Client
{
public class Client
{
protected virtual void Apply(object @event) { }
protected IEnumerable<Type> RegisteredEvents()
{
yield return typeof(ClientMovedEvent);
}
protected virtual Address Address { get; set; }
public void ClientMoved(Address newAddress)
{
Apply(new ClientMovedEvent(newAddress));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment