Entrega 3 Diseño acciones automaticas - PabloFederico/template-tp-grupal GitHub Wiki
#Diseño de solución para eventos que suceden cada X tiempo:
##Version inicial Originalmente teníamos una implementación que utilizaba la clase Timer la cual ya provee el método schedule que resuelve el problema de ejecuciones periódicas. De todas maneras dicha solución nos traía problemas a la hora de testear las acciones croneadas porque no podíamos simular el paso del tiempo.
##Version actual Para resolver este problema planteamos el siguiente diseño:
###Descripción de las clases: ####Clock: Maneja la hora, se le puede setear un horario en el pasado o futuro. ####Job: Maneja el código a ejecutar cada X tiempo, es decir que tiene la lógica a ejecutar cuando haya transcurrido el tiempo necesario (Ejemplo: que el bibliotecario se despierte a los 2 minutos). Internamente utiliza una instancia de la clase Clock para chequear si ya paso el tiempo necesario desde la última ejecución. ####Scheduler: Maneja la lógica de estar corriendo todo el tiempo y lanzar la ejecución de los jobs cuando sea el momento correcto. Es un Thread con un while true que lo que hace es chequear la hora del clock y si paso 1 minuto itera la lista de jobs que tiene asociada y cada uno de ellos se fija si es su momento de correr (ya que algunos corren cada 2 o 4 minutos) y en caso positivo lo ejecuta.
De esta manera modelamos dicho requerimiento y resolvimos el problema a la hora de testearlo ya que estamos encapsulando la hora que utilizan tanto el Job como el Scheduler para decidir si tienen que ejecutarse