Mercurial > altnet-hispano
changeset 104:c5034884c7d7
refactor para que los estados sean singletons
author | jorge.rowies |
---|---|
date | Sun, 05 Jun 2011 13:22:36 -0300 |
parents | 23325dddddcc |
children | 1d820f17fc75 |
files | Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Domain/EventoAgendadoState.cs Agendas/trunk/src/Agendas.Domain/EventoConfirmadoState.cs Agendas/trunk/src/Agendas.Domain/EventoNullState.cs Agendas/trunk/src/Agendas.Domain/EventoPropuestoState.cs Agendas/trunk/src/Agendas.Domain/EventoPublicadoState.cs Agendas/trunk/src/Agendas.Domain/Exceptions/InvalidStateException.cs |
diffstat | 8 files changed, 88 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Sun Jun 05 13:06:23 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Sun Jun 05 13:22:36 2011 -0300 @@ -57,6 +57,7 @@ <Compile Include="Identificable.cs" /> <Compile Include="Identification.cs" /> <Compile Include="IdentityContext.cs" /> + <Compile Include="Exceptions\InvalidStateException.cs" /> <Compile Include="ISeguridad.cs" /> <Compile Include="Persona.cs" /> <Compile Include="Repositories\IEventoRepository.cs" />
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Sun Jun 05 13:06:23 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Sun Jun 05 13:22:36 2011 -0300 @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { @@ -69,29 +70,16 @@ { if (value != Estado) { - switch (value) - { - case EventoPropuestoState.Descripcion: - { - _eventoState = new EventoPropuestoState(); - break; - } - case EventoAgendadoState.Descripcion: - { - _eventoState = new EventoAgendadoState(); - break; - } - case EventoConfirmadoState.Descripcion: - { - _eventoState = new EventoConfirmadoState(); - break; - } - case EventoPublicadoState.Descripcion: - { - _eventoState = new EventoPublicadoState(); - break; - } - } + if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoPropuestoState.GetInstance(); + else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoAgendadoState.GetInstance(); + else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoConfirmadoState.GetInstance(); + else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value)) + _eventoState = EventoPublicadoState.GetInstance(); + else + throw new InvalidStateException(value); } } } @@ -104,7 +92,7 @@ public virtual EventoState GetEstado() { if (_eventoState == null) - SetEstado(new EventoNullState()); + SetEstado(EventoNullState.GetInstance()); return _eventoState; }
--- a/Agendas/trunk/src/Agendas.Domain/EventoAgendadoState.cs Sun Jun 05 13:06:23 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoAgendadoState.cs Sun Jun 05 13:22:36 2011 -0300 @@ -4,14 +4,24 @@ { public class EventoAgendadoState : EventoState { - public const string Descripcion = "Agendado"; + private EventoAgendadoState() + { + } + + private static readonly EventoState _instance = new EventoAgendadoState(); + public static EventoState GetInstance() + { + return _instance; + } + + private const string Descripcion = "Agendado"; public override void Promover(Evento evento, Accion accion) { switch (accion) { case Accion.Confirmar: - evento.SetEstado(new EventoConfirmadoState()); + evento.SetEstado(EventoConfirmadoState.GetInstance()); evento.AddTrack(new Track(evento, Accion.Confirmar)); break; default:
--- a/Agendas/trunk/src/Agendas.Domain/EventoConfirmadoState.cs Sun Jun 05 13:06:23 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoConfirmadoState.cs Sun Jun 05 13:22:36 2011 -0300 @@ -4,14 +4,24 @@ { public class EventoConfirmadoState : EventoState { - public const string Descripcion = "Confirmado"; + private EventoConfirmadoState() + { + } + + private static readonly EventoState _instance = new EventoConfirmadoState(); + public static EventoState GetInstance() + { + return _instance; + } + + private const string Descripcion = "Confirmado"; public override void Promover(Evento evento, Accion accion) { switch (accion) { case Accion.Publicar: - evento.SetEstado(new EventoPublicadoState()); + evento.SetEstado(EventoPublicadoState.GetInstance()); evento.AddTrack(new Track(evento, Accion.Publicar)); break; default:
--- a/Agendas/trunk/src/Agendas.Domain/EventoNullState.cs Sun Jun 05 13:06:23 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoNullState.cs Sun Jun 05 13:22:36 2011 -0300 @@ -4,16 +4,28 @@ { public class EventoNullState : EventoState { + private EventoNullState() + { + } + + private static readonly EventoState _instance = new EventoNullState(); + public static EventoState GetInstance() + { + return _instance; + } + + private const string Descripcion = "NullState"; + public override void Promover(Evento evento, Accion accion) { switch (accion) { case Accion.Proponer: - evento.SetEstado(new EventoPropuestoState()); + evento.SetEstado(EventoPropuestoState.GetInstance()); evento.AddTrack(new Track(evento, Accion.Proponer)); break; case Accion.Agendar: - evento.SetEstado(new EventoAgendadoState()); + evento.SetEstado(EventoAgendadoState.GetInstance()); evento.AddTrack(new Track(evento, Accion.Agendar)); break; default: @@ -23,7 +35,7 @@ public override string GetDescripcion() { - return "NullState"; + return Descripcion; } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/EventoPropuestoState.cs Sun Jun 05 13:06:23 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoPropuestoState.cs Sun Jun 05 13:22:36 2011 -0300 @@ -4,14 +4,24 @@ { public class EventoPropuestoState : EventoState { - public const string Descripcion = "Propuesto"; + private EventoPropuestoState() + { + } + + private static readonly EventoState _instance = new EventoPropuestoState(); + public static EventoState GetInstance() + { + return _instance; + } + + private const string Descripcion = "Propuesto"; public override void Promover(Evento evento, Accion accion) { switch (accion) { case Accion.Agendar: - evento.SetEstado(new EventoAgendadoState()); + evento.SetEstado(EventoAgendadoState.GetInstance()); evento.AddTrack(new Track(evento, Accion.Agendar)); break; default:
--- a/Agendas/trunk/src/Agendas.Domain/EventoPublicadoState.cs Sun Jun 05 13:06:23 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoPublicadoState.cs Sun Jun 05 13:22:36 2011 -0300 @@ -4,7 +4,17 @@ { public class EventoPublicadoState : EventoState { - public const string Descripcion = "Publicado"; + private EventoPublicadoState() + { + } + + private static readonly EventoState _instance = new EventoPublicadoState(); + public static EventoState GetInstance() + { + return _instance; + } + + private const string Descripcion = "Publicado"; public override void Promover(Evento evento, Accion accion) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Domain/Exceptions/InvalidStateException.cs Sun Jun 05 13:22:36 2011 -0300 @@ -0,0 +1,13 @@ +using System; +using System.Globalization; + +namespace AltNetHispano.Agendas.Domain.Exceptions +{ + public class InvalidStateException : Exception + { + public InvalidStateException(string state) + : base(string.Format(CultureInfo.InvariantCulture, "El estado '{0}' no es valido", state)) + { + } + } +} \ No newline at end of file