Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Evento.cs @ 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 |
rev | line source |
---|---|
1 | 1 using System; |
12 | 2 using System.Collections.Generic; |
104 | 3 using AltNetHispano.Agendas.Domain.Exceptions; |
1 | 4 |
5 namespace AltNetHispano.Agendas.Domain | |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
6 { |
56
65bbcdd5d357
Pasando la responsabilidad de generar el Id al repositorio
nelopauselli
parents:
54
diff
changeset
|
7 public class Evento : Identificable |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
8 { |
63 | 9 protected Evento() |
57 | 10 { |
54 | 11 _tracks = new List<Track>(); |
12 } | |
13 | |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
14 #region Propiedades del Evento |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
15 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
16 private readonly IList<Track> _tracks; |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
17 private readonly ICollection<Track> _newTracks = new List<Track>(); |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
18 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
19 /// <summary> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
20 /// Título del evento |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
21 /// </summary> |
63 | 22 public virtual string Titulo { get; private set; } |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
23 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
24 /// <summary> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
25 /// Fecha para la que se encuentra agendado el evento |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
26 /// </summary> |
63 | 27 public virtual DateTime? Fecha { get; private set; } |
70
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
28 |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
29 /// <summary> |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
30 /// Url con la invitacion realizada por el ponente (en la mayoria de los casos va a ser un link al thread de la lista de correo) |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
31 /// </summary> |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
32 public virtual string UrlInvitacion { get; private set; } |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
33 |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
34 /// <summary> |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
35 /// Url a la pagina de la wiki con el video de la reunion virtual |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
36 /// </summary> |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
37 public virtual string UrlWiki { get; private set; } |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
38 |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
39 /// <summary> |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
40 /// Numero de orden en el historico de reuniones virtuales |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
41 /// </summary> |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
42 public virtual short NumeroOrden { get; private set; } |
c7264bfc4b71
agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden)
jorge.rowies
parents:
63
diff
changeset
|
43 |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
44 /// <summary> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
45 /// Ponente o responsable del evento |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
46 /// </summary> |
97
2434c2323f3d
En el evento, volvemos a llamar Ponente a la persona que está a cargo de la presentación
Nelo@Kenia.neluz.int
parents:
95
diff
changeset
|
47 public virtual Persona Ponente { get; private set; } |
39 | 48 |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
49 /// <summary> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
50 /// Track de cambios que ha sufrido el evento |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
51 /// </summary> |
63 | 52 public virtual IEnumerable<Track> Tracks |
54 | 53 { |
54 get { return _tracks; } | |
55 } | |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
24
diff
changeset
|
56 |
103 | 57 /// <summary> |
58 /// Estado del evento en formato string (para persistencia a DB) | |
59 /// </summary> | |
60 public virtual string Estado | |
61 { | |
62 get | |
63 { | |
64 if (_eventoState != null) | |
65 return _eventoState.GetDescripcion(); | |
66 | |
67 return string.Empty; | |
68 } | |
69 set | |
70 { | |
71 if (value != Estado) | |
72 { | |
104 | 73 if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value)) |
74 _eventoState = EventoPropuestoState.GetInstance(); | |
75 else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value)) | |
76 _eventoState = EventoAgendadoState.GetInstance(); | |
77 else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value)) | |
78 _eventoState = EventoConfirmadoState.GetInstance(); | |
79 else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value)) | |
80 _eventoState = EventoPublicadoState.GetInstance(); | |
81 else | |
82 throw new InvalidStateException(value); | |
103 | 83 } |
84 } | |
85 } | |
86 | |
87 private EventoState _eventoState; | |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
88 |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
89 /// <summary> |
103 | 90 /// Obtiene una instancia de la clase que representa el estado del evento |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
91 /// </summary> |
103 | 92 public virtual EventoState GetEstado() |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
93 { |
103 | 94 if (_eventoState == null) |
104 | 95 SetEstado(EventoNullState.GetInstance()); |
103 | 96 |
97 return _eventoState; | |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
98 } |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
99 |
103 | 100 /// <summary> |
101 /// Asigna la instancia de la clase que representa el estado del evento | |
102 /// </summary> | |
103 /// <param name="eventoState">Instancia que representa el estado</param> | |
104 public virtual void SetEstado(EventoState eventoState) | |
105 { | |
106 _eventoState = eventoState; | |
107 } | |
108 | |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
109 #endregion |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
110 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
111 #region Acciones sobre el evento |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
112 |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
113 /// <summary> |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
114 /// Propone un evento |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
115 /// </summary> |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
116 /// <param name="titulo">Título del evento propuesto</param> |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
117 /// <param name="persona">Ponente para evento propuesto</param> |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
118 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
119 /// <returns></returns> |
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
120 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
121 { |
97
2434c2323f3d
En el evento, volvemos a llamar Ponente a la persona que está a cargo de la presentación
Nelo@Kenia.neluz.int
parents:
95
diff
changeset
|
122 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion}; |
103 | 123 evento.GetEstado().Promover(evento, Accion.Proponer); |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
124 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
125 return evento; |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
126 } |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
127 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
128 /// <summary> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
129 /// Agenda un evento que no estaba propuesto |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
130 /// </summary> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
131 /// <param name="titulo">Título del evento a agendar</param> |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
132 /// <param name="persona">Ponente para el evento</param> |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
133 /// <param name="fecha">Fecha de realización del evento</param> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
134 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
135 /// <returns></returns> |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
136 public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion) |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
137 { |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
138 var evento = new Evento { Titulo = titulo }; |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
139 evento.Agendar(persona, fecha, urlInvitacion); |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
140 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
141 return evento; |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
142 } |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
143 |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
144 /// <summary> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
145 /// Agenda el evento actual |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
146 /// </summary> |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
147 /// <param name="persona">Ponente para el evento</param> |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
148 /// <param name="fecha">Fecha de realización del evento</param> |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
149 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
150 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
151 { |
97
2434c2323f3d
En el evento, volvemos a llamar Ponente a la persona que está a cargo de la presentación
Nelo@Kenia.neluz.int
parents:
95
diff
changeset
|
152 Ponente = persona; |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
153 Fecha = fecha; |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
154 UrlInvitacion = urlInvitacion; |
103 | 155 this.GetEstado().Promover(this, Accion.Agendar); |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
156 } |
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
157 |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
158 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) |
54 | 159 { |
97
2434c2323f3d
En el evento, volvemos a llamar Ponente a la persona que está a cargo de la presentación
Nelo@Kenia.neluz.int
parents:
95
diff
changeset
|
160 Ponente = persona; |
54 | 161 Fecha = fecha; |
79
8df9db937434
Url de invitación en la UI: validación y persistencia
nelopauselli
parents:
75
diff
changeset
|
162 UrlInvitacion = urlInvitacion; |
39 | 163 |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
164 AddTrack(new Track(this, Accion.Modificar)); |
54 | 165 } |
41
07c47ea2ac00
movimos el AddTrack a cada acción dentro de Evento
nelopauselli
parents:
39
diff
changeset
|
166 |
63 | 167 public virtual void CambiarTitulo(string titulo) |
54 | 168 { |
169 Titulo = titulo; | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
170 AddTrack(new Track(this, Accion.CambiarTitulo)); |
54 | 171 } |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
24
diff
changeset
|
172 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
173 public virtual void Confirmar() |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
174 { |
103 | 175 this.GetEstado().Promover(this, Accion.Confirmar); |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
176 } |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
177 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
178 public virtual void Publicar() |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
179 { |
103 | 180 this.GetEstado().Promover(this, Accion.Publicar); |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
181 } |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
182 |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
183 #endregion |
39 | 184 |
101
9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
jorge.rowies
parents:
97
diff
changeset
|
185 protected internal virtual void AddTrack(Track track) |
54 | 186 { |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
187 _newTracks.Add(track); |
54 | 188 _tracks.Add(track); |
189 } | |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
80
diff
changeset
|
190 |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
191 public virtual IEnumerable<Track> GetTrackNews() |
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
192 { |
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
193 return _newTracks; |
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
81
diff
changeset
|
194 } |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
24
diff
changeset
|
195 } |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
196 } |