Как создать календарь - PullRequest
       10

Как создать календарь

0 голосов
/ 20 ноября 2018

Это вопрос OOD.Дизайн календаря.Требование:

  • добавление события
  • удаление события
  • получение всех событий за определенный день

Обоснование структуры данныхи разработка тестовых случаев

Я знаю, что мне нужно предоставить такие API, как addEvent (), deleteEvent (), getEventByDay ()

Я застрял на первом API, добавлю событие.Я предложил два решения, я просто не знаю, какой шаблон лучше и почему.

version1:

public class Calender {
    // helper class
    public static class Event {
        String name;

        Event(String s) {
            name = s;
        }
    }

    Calender() {

    }

    // API
    public void addEvent(Event e) {
        // todo
    }

    // driver function
    public static void main(String[] args) {
        Calender calender = new Calender();

        Event event = new Event("event");
        calender.addEvent(event);
    }
}

version2:

public class Calender {
    int systemId;

    // helper class
    public static class Event {
        String name;

        Event(String s) {
            name = s;
        }
    }

    Calender() {

    }

    // API
    public int addEvent(String s) {
        Event event = new Event(s);
        systemId++;
        return systemId - 1; // after add an event, return the unique id for it
    }

    // driver function
    public static void main(String[] args) {
        Calender calender = new Calender();
        int id = calender.addEvent("a");
    }
}

Класс вышене завершен.Основное отличие состоит в том, что нам нужно позволить пользователю создать событие, затем добавить этот экземпляр или просто использовать существующий API для создания события и получить уникальный идентификатор для этого события?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Calendar и Event, как я идентифицирую, это две разные, автономные сущности.Хотя Событие может зависеть от объекта Календаря для хранения его конкретной даты / времени.Они должны быть независимыми и не могут быть включены в Calendar API.

При этом версия2 выглядит более многообещающе и масштабируемо. Версия2 дает вам гибкость в изменении класса Event для расширения возможностей, изменения конструкторов или добавления методов, без влияния на Календарь .

Например, если вам нужно добавить место проведения события вместе с его именем, вы можете просто изменить конструктор события.Или добавьте другой метод внутри класса Event.Оставив календарь без изменений.

В другой точке проектирования класс Event также может расширять Calendar, если сценарий использования календаря относится только к добавлению возможностей даты / времени к Event.

0 голосов
/ 20 ноября 2018

Я бы оставил оба метода.Разрешить пользователю либо вставлять новый Event объект, либо просто передать строку и добавить ее.

public class Calendar {
    public static class Event {
        String name;

        Event(String s) {
            name = s;
        }
    }

    Calendar() {
    }

    public void addEvent(Event e) {
        // todo
    }

    public int addEvent(String s) {
        Event event = new Event(s);
        systemId++;
        return systemId - 1; // after add an event, return the unique id for it
    }

}

При этом я бы сделал следующее:

  • Удалитеmain из класса Calendar, он должен быть, например, в отдельном Application классе, который будет создавать экземпляр вашего календаря.
  • Вместо того, чтобы возвращать идентификатор события при его добавлении, добавьтевведите id в свой класс Event, заполните его новым идентификатором и верните весь объект Event.
  • Возможно, поместите класс Event в отдельный файл вместо того, чтобы поместить его в Calendar.Это спорно, если это имеет смысл или нет, так что осталось к вашей оценке.

Кроме того, вы должны сохранить список событий в календаре, для того, чтобы быть в состоянии вернуть весь список событийили удалить один, как указано темой вашего упражнения.

...