Morning routine

    28 feb 2024, 0:00:00

    Como soy una persona olvidadiza, necesito un método que me ayude a recordar mi rutina matutina. Por eso he creado un programa que, según la hora del día, me dirá lo que tengo que hacer:


    De 06:00 a 06:59 - Hacer ejercicio
    De 07:00 a 07:59 - Leer y estudiar
    De 08:00 a 08:59 - Desayunar

    Introducción

    Este kata se puede hacer con dos enfoques:

    • Desde cero
    • Refactorizando la implementación proporcionada

    Enfoque desde cero

    Historia: Recordatorio de la rutina matutina

    Historia de usuario:

    Como soy una persona olvidadiza,
    quiero un programa que me recuerde mi rutina matutina,
    para que pueda seguir con mis actividades.

    Escenario 1: Mostrar "Hacer ejercicio" entre las 06:00 y las 06:59

    Dado que la hora actual es entre las 06:00 y las 06:59
    Cuando solicito la actividad a realizar
    El sistema debería mostrar "Hacer ejercicio"


    Escenario 2: Mostrar "Leer y estudiar" entre las 07:00 y las 07:59

    Dado que la hora actual es entre las 07:00 y las 07:59
    Cuando solicito la actividad a realizar
    El sistema debería mostrar "Leer y estudiar"


    Escenario 3: Mostrar "Desayunar" entre las 08:00 y las 08:59

    Dado que la hora actual es entre las 08:00 y las 08:59
    Cuando solicito la actividad a realizar
    El sistema debería mostrar "Desayunar"


    Escenario 4: Mostrar "Sin actividad" fuera del intervalo de tiempo definido


    Dado que la hora actual es antes de las 05:59 o después de las 09:00
    Cuando solicito la actividad a realizar
    El sistema debería mostrar "Sin actividad"

    Iteración 2 - Tiempo más preciso

    Ahora me gustaría poder añadir cosas por hacer que lleven menos de una hora, así como actualizar la lista de cosas por hacer, por ejemplo:


    De 06:00 a 06:59 - Hacer ejercicio
    De 07:00 a 07:29 - Leer
    De 07:30 a 07:59 - Estudiar
    De 08:00 a 08:59 - Desayunar
    De 06:00 a 06:44 - Hacer ejercicio
    De 06:45 a 06:59 - Ducharse
    De 07:00 a 07:29 - Leer
    De 07:30 a 07:59 - Estudiar
    De 08:00 a 09:00 - Desayunar

    Interfaz que se puede utilizar

    interface MorningRoutine {
        String whatShouldIDoNow();
    }


    interface MorningRoutine {
        void whatShouldIDoNow();
    }

    Enfoque de refactorización

    Implementación de Smelly para la iteración 1 en Java


    interface MorningRoutine {
        void whatShouldIDoNow();
    }

    public class MyMorningRouting implements MorningRoutine {
        public void whatShouldIDoNow() {
            LocalDateTime now = LocalDateTime.now();
            int currentHour = now.getHour();
            if (currentHour == 6) {
                System.out.println("Do exercise");
            } else if (currentHour == 7) {
                System.out.println("Read and study");
            } else if (currentHour == 8) {
                System.out.println("Have breakfast");
            } else {
                System.out.println("No activity");
            }
        }
    }

    Para reflexionar...

    • ¿Funcionaría tu programa en otra zona horaria?
    • ¿Es fácil añadir nuevas actividades al calendario existente con tu diseño actual?
    • ¿Tu aplicación te permite añadir actividades más largas o más cortas?