Mercurial > altnet-hispano
comparison 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 |
comparison
equal
deleted
inserted
replaced
100:cc91817a4206 | 101:9bfdd5bf3ad2 |
---|---|
6 public class Evento : Identificable | 6 public class Evento : Identificable |
7 { | 7 { |
8 protected Evento() | 8 protected Evento() |
9 { | 9 { |
10 _tracks = new List<Track>(); | 10 _tracks = new List<Track>(); |
11 _estado = new EventoNullState(this); | |
11 } | 12 } |
12 | 13 |
13 #region Propiedades del Evento | 14 #region Propiedades del Evento |
14 | 15 |
15 private readonly IList<Track> _tracks; | 16 private readonly IList<Track> _tracks; |
51 public virtual IEnumerable<Track> Tracks | 52 public virtual IEnumerable<Track> Tracks |
52 { | 53 { |
53 get { return _tracks; } | 54 get { return _tracks; } |
54 } | 55 } |
55 | 56 |
56 #endregion | 57 private EventoState _estado; |
58 | |
59 /// <summary> | |
60 /// Estado del evento | |
61 /// </summary> | |
62 public virtual EventoState Estado | |
63 { | |
64 get { return _estado; } | |
65 protected internal set { _estado = value; } | |
66 } | |
67 | |
68 #endregion | |
57 | 69 |
58 #region Acciones sobre el evento | 70 #region Acciones sobre el evento |
59 | 71 |
60 /// <summary> | 72 /// <summary> |
61 /// Propone un evento | 73 /// Propone un evento |
62 /// </summary> | 74 /// </summary> |
63 /// <param name="titulo">Título del evento propuesto</param> | 75 /// <param name="titulo">Título del evento propuesto</param> |
64 /// <param name="persona">Ponente para evento propuesto</param> | 76 /// <param name="persona">Ponente para evento propuesto</param> |
65 /// <returns></returns> | 77 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> |
66 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) | 78 /// <returns></returns> |
79 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) | |
67 { | 80 { |
68 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion}; | 81 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion}; |
69 evento.AddTrack(new Track(evento, Accion.Proponer)); | 82 evento.Estado.Promover(Accion.Proponer); |
70 | 83 |
71 return evento; | 84 return evento; |
72 } | 85 } |
73 | 86 |
74 /// <summary> | 87 /// <summary> |
80 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> | 93 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> |
81 /// <returns></returns> | 94 /// <returns></returns> |
82 public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion) | 95 public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion) |
83 { | 96 { |
84 var evento = new Evento { Titulo = titulo }; | 97 var evento = new Evento { Titulo = titulo }; |
85 evento.Agendar(persona, fecha, urlInvitacion); | 98 evento.Agendar(persona, fecha, urlInvitacion); |
86 | 99 |
87 return evento; | 100 return evento; |
88 } | 101 } |
89 | 102 |
90 /// <summary> | 103 /// <summary> |
96 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) | 109 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) |
97 { | 110 { |
98 Ponente = persona; | 111 Ponente = persona; |
99 Fecha = fecha; | 112 Fecha = fecha; |
100 UrlInvitacion = urlInvitacion; | 113 UrlInvitacion = urlInvitacion; |
101 AddTrack(new Track(this, Accion.Agendar)); | 114 this.Estado.Promover(Accion.Agendar); |
102 } | 115 } |
103 | 116 |
104 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) | 117 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) |
105 { | 118 { |
106 Ponente = persona; | 119 Ponente = persona; |
116 AddTrack(new Track(this, Accion.CambiarTitulo)); | 129 AddTrack(new Track(this, Accion.CambiarTitulo)); |
117 } | 130 } |
118 | 131 |
119 public virtual void Confirmar() | 132 public virtual void Confirmar() |
120 { | 133 { |
121 AddTrack(new Track(this, Accion.Confirmar)); | 134 this.Estado.Promover(Accion.Confirmar); |
122 } | 135 } |
123 | 136 |
124 public virtual void Publicar() | 137 public virtual void Publicar() |
125 { | 138 { |
126 AddTrack(new Track(this, Accion.Publicar)); | 139 this.Estado.Promover(Accion.Publicar); |
127 } | 140 } |
128 | 141 |
129 #endregion | 142 #endregion |
130 | 143 |
131 private void AddTrack(Track track) | 144 protected internal virtual void AddTrack(Track track) |
132 { | 145 { |
133 _newTracks.Add(track); | 146 _newTracks.Add(track); |
134 _tracks.Add(track); | 147 _tracks.Add(track); |
135 } | 148 } |
136 | 149 |