# 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