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