Mercurial > altnet-hispano
diff Agendas/trunk/src/Agendas.Domain/Evento.cs @ 101:9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
author | jorge.rowies |
---|---|
date | Sun, 05 Jun 2011 11:10:32 -0300 |
parents | 2434c2323f3d |
children | 23325dddddcc |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Sat Jun 04 22:46:06 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Sun Jun 05 11:10:32 2011 -0300 @@ -8,6 +8,7 @@ protected Evento() { _tracks = new List<Track>(); + _estado = new EventoNullState(this); } #region Propiedades del Evento @@ -53,20 +54,32 @@ get { return _tracks; } } - #endregion + private EventoState _estado; + + /// <summary> + /// Estado del evento + /// </summary> + public virtual EventoState Estado + { + get { return _estado; } + protected internal set { _estado = value; } + } + + #endregion #region Acciones sobre el evento - /// <summary> - /// Propone un evento - /// </summary> - /// <param name="titulo">Título del evento propuesto</param> - /// <param name="persona">Ponente para evento propuesto</param> - /// <returns></returns> - public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) + /// <summary> + /// Propone un evento + /// </summary> + /// <param name="titulo">Título del evento propuesto</param> + /// <param name="persona">Ponente para evento propuesto</param> + /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> + /// <returns></returns> + public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) { var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion}; - evento.AddTrack(new Track(evento, Accion.Proponer)); + evento.Estado.Promover(Accion.Proponer); return evento; } @@ -82,7 +95,7 @@ public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion) { var evento = new Evento { Titulo = titulo }; - evento.Agendar(persona, fecha, urlInvitacion); + evento.Agendar(persona, fecha, urlInvitacion); return evento; } @@ -98,7 +111,7 @@ Ponente = persona; Fecha = fecha; UrlInvitacion = urlInvitacion; - AddTrack(new Track(this, Accion.Agendar)); + this.Estado.Promover(Accion.Agendar); } public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) @@ -118,17 +131,17 @@ public virtual void Confirmar() { - AddTrack(new Track(this, Accion.Confirmar)); + this.Estado.Promover(Accion.Confirmar); } public virtual void Publicar() { - AddTrack(new Track(this, Accion.Publicar)); + this.Estado.Promover(Accion.Publicar); } #endregion - private void AddTrack(Track track) + protected internal virtual void AddTrack(Track track) { _newTracks.Add(track); _tracks.Add(track);