# HG changeset patch # User jorge.rowies # Date 1307290956 10800 # Node ID c5034884c7d7b1a9a3caedb7021e47eb4af5bb28 # Parent 23325dddddcc6070dfdd1697d6cc63643d3e16a1 refactor para que los estados sean singletons diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj --- 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 @@ + diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/Evento.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; } diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/EventoAgendadoState.cs --- 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: diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/EventoConfirmadoState.cs --- 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: diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/EventoNullState.cs --- 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 diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/EventoPropuestoState.cs --- 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: diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/EventoPublicadoState.cs --- 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) { diff -r 23325dddddcc -r c5034884c7d7 Agendas/trunk/src/Agendas.Domain/Exceptions/InvalidStateException.cs --- /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