diff Agendas/trunk/src/Agendas.Domain/Evento.cs @ 140:3639803112c6

Refactoring de la relación entre Evento y Estado
author nelopauselli
date Fri, 29 Jul 2011 16:30:53 -0300
parents 18e5a78186e4
children 5c94b052d838
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Thu Jul 28 10:16:09 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Fri Jul 29 16:30:53 2011 -0300
@@ -1,7 +1,5 @@
 using System;
-using System.Collections;
 using System.Collections.Generic;
-using AltNetHispano.Agendas.Domain.Exceptions;
 
 namespace AltNetHispano.Agendas.Domain
 {
@@ -56,63 +54,20 @@
 			get { return _tracks; }
 		}
 
+		private EventoState _estado;
+
 		/// <summary>
 		/// Estado del evento en formato string (para persistencia a DB)
 		/// </summary>
-		public virtual string Estado
+		public virtual EventoState Estado
 		{
-			get
-			{
-				if (_eventoState != null)
-					return _eventoState.GetDescripcion();
-
-				return string.Empty;
-			}
-			set
-			{
-				if (value != Estado)
-				{
-					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 if (EventoCanceladoState.GetInstance().GetDescripcion().Equals(value))
-						_eventoState = EventoCanceladoState.GetInstance();
-					else if (EventoDescartadoState.GetInstance().GetDescripcion().Equals(value))
-						_eventoState = EventoDescartadoState.GetInstance();
-					else
-						throw new InvalidStateException(value);
-				}
-			}
+			get { return _estado ?? EventoNullState.GetInstance(); }
+			set { _estado = value; }
 		}
 
-		private EventoState _eventoState;
+		//private EventoState _eventoState;
 		private IList<Patrocinador> _patrocinadores;
 
-		/// <summary>
-		/// Obtiene una instancia de la clase que representa el estado del evento
-		/// </summary>
-		public virtual EventoState GetEstado()
-		{
-			if (_eventoState == null)
-				SetEstado(EventoNullState.GetInstance());
-
-			return _eventoState;
-		}
-
-		/// <summary>
-		/// Asigna la instancia de la clase que representa el estado del evento
-		/// </summary>
-		/// <param name="eventoState">Instancia que representa el estado</param>
-		public virtual void SetEstado(EventoState eventoState)
-		{
-			_eventoState = eventoState;
-		}
-
 		public virtual TipoEvento Tipo { get; private set; }
 
 		public virtual IEnumerable<Patrocinador> Patrocinadores
@@ -149,7 +104,7 @@
 		public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo)
 		{
 			var evento = new Evento { Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo };
-			evento.GetEstado().Promover(evento, Accion.Proponer);
+			evento.Estado.Promover(evento, Accion.Proponer);
 
 			return evento;
 		}
@@ -182,7 +137,7 @@
 			Ponente = persona;
 			Fecha = fecha;
 			UrlInvitacion = urlInvitacion;
-			this.GetEstado().Promover(this, Accion.Agendar);
+			this.Estado.Promover(this, Accion.Agendar);
 		}
 
 		public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion)
@@ -202,34 +157,34 @@
 
 		public virtual void Confirmar()
 		{
-			this.GetEstado().Promover(this, Accion.Confirmar);
+			this.Estado.Promover(this, Accion.Confirmar);
 		}
 
 		public virtual void Publicar(short numeroOrden, string urlWiki)
 		{
 			this.NumeroOrden = numeroOrden;
 			this.UrlWiki = urlWiki;
-			this.GetEstado().Promover(this, Accion.Publicar);
+			this.Estado.Promover(this, Accion.Publicar);
 		}
 
 		public virtual void Cancelar()
 		{
-			GetEstado().Promover(this, Accion.Cancelar);
+			Estado.Promover(this, Accion.Cancelar);
 		}
 
 		public virtual void Descartar()
 		{
-			GetEstado().Promover(this, Accion.Descartar);
+			Estado.Promover(this, Accion.Descartar);
 		}
 
 		public virtual void ReProponer()
 		{
-			GetEstado().Promover(this, Accion.ReProponer);
+			Estado.Promover(this, Accion.ReProponer);
 		}
 
 		public virtual void ReAgendar()
 		{
-			GetEstado().Promover(this, Accion.ReAgendar);
+			Estado.Promover(this, Accion.ReAgendar);
 		}
 		#endregion