view Agendas/trunk/src/Agendas.Domain/Evento.cs @ 57:3d9e6d56d903

Refactoring del track de cambios de un evento
author nelopauselli
date Mon, 16 May 2011 20:23:31 -0300
parents 65bbcdd5d357
children cb3f7b47c1f0
line wrap: on
line source

using System;
using System.Collections.Generic;

namespace AltNetHispano.Agendas.Domain
{
	public class Evento : Identificable
	{
		private readonly IList<Track> _tracks;
		private IList<string> _enlaces;

		public static Evento Proponer(string titulo, Ponente ponente)
		{
			var evento = new Evento { Titulo = titulo, Ponente = ponente };
			evento.AddTracks(new Track(Accion.Proponer));

			return evento;
		}

		public static Evento Publicar(string titulo, Ponente ponente, DateTime fecha)
		{
			var evento = new Evento { Titulo = titulo };
			evento.Publicar(ponente, fecha);

			return evento;
		}

		private Evento()
		{
			_enlaces = new List<string>();
			_tracks = new List<Track>();
		}

		public string Titulo { get; private set; }
		public DateTime? Fecha { get; private set; }
		public string Sintesis { get; private set; }
		public Ponente Ponente { get; private set; }

		public IEnumerable<string> Enlaces
		{
			get { return _enlaces; }
		}

		public IEnumerable<Track> Tracks
		{
			get { return _tracks; }
		}

		public void Actualizar(Ponente ponente, DateTime? fecha)
		{
			Ponente = ponente;
			Fecha = fecha;

			AddTracks(new Track(Accion.Modificar));
		}

		public void CambiarTitulo(string titulo)
		{
			Titulo = titulo;
			AddTracks(new Track(Accion.CambiarTitulo));
		}

		public void Publicar(Ponente ponente, DateTime? fecha)
		{
			Ponente = ponente;
			Fecha = fecha;
			AddTracks(new Track(Accion.Publicar));
		}

		public void Realizado(DateTime fecha, string sintesis, IList<string> enlaces)
		{
			Fecha = fecha;
			Sintesis = sintesis;
			_enlaces = enlaces;
		}

		public void Realizado(string sintesis)
		{
			Sintesis = sintesis;
			AddTracks(new Track(Accion.Realizar));
		}

		private void AddTracks(Track track)
		{
			_tracks.Add(track);
		}
	}
}