Repository for homework project.
В функциях сознательно добавлял поле типа задачи, чтобы облегчить код. Одна переменная убирает необходимость писать кейс из трёх условий на проверку типа
addTask(Object obj) -добавить простую задачу, аргумент - объект простая задача
addSubTask(int epicId, Object obj) - добавить подзадачу, epicId - Ид эпика, к которому она относится, obj - задача типа Subtask
addEpic(Object obj, ArrayList objs) - добавить эпик и список подзадач в нём. obj - задача типа Epic objs - список подзадач типа Subtask
getAllTasks() - вывод всех задач в com.yandex.taskmanager.service.InMemoryTaskManager
getTasksByType(Types type) - вывод задач по их типу: EPIC, SUBEPIC, SIMPLE
delTasksByType(Types type) - удаление всех задач выбранного типа. Считаю данный метод неконструктивным, но в условии он требуется. Считаю более эффективным и правильным удаление по ИДентификатору
getTasksById(int id) - получить список задач по заданному идентификатору
updateTask(int id, Types type, Object task) - обновление существующей задачи, аргументы - id задачи, её тип, новый объект задачи
delTaskById(int id, Types type) - удаление задачи по её id, аргументы - ид задачи и её тип
getSubsByEpicId(int id) - получение списка подзадач по Ид задачи-эпика
Далее идут 3 чисто технических функции-сокращения, которые не понадобятся для тестировщика или фронт-энд
1."В методе addSubTask и других методах используется повторяющаяся логика для подсчета статусов подзадач эпика. Это можно вынести в отдельный метод (как это сделано в repeatedExpression)."
Вчера поспешил и не спрятал ещё одно выражение под шапку, сегодня поправил + добавил ещё одно небольшое repexp2, в методах, где оно используется, мог бы написать всё в 1 строку, но для читаемости кода оставил переменную.
2."Методы getAllTasks() и getTasksByType() возвращают ArrayList, что приводит к проблемам с типами. В Java следует избегать использования Object, так как это требует приведения типов и ухудшает типобезопасность. Используйте обобщенные коллекции, возвращающие конкретные типы задач:"
Понял, на будущее не буду использовать, просто у нас целую тему посветили Object.Насколько я понимаю, объект следует использовать только в переопределении методов. Так же, я сделал реализацию вывода по спискам определенных объектов, но и оставил вывод в HashMap, чтобы получить ID задач для проверок
3."Вместо изменения статуса на Status.DONE при удалении всех подзадач эпика, лучше использовать статус NEW, так как у эпика больше нет подзадач, и он может считаться новым."
Тут у меня логика немного странно сработала, я решил, раз подзадачи удалили, значит - мы их выполнили. Поменял, как Вы сказали.
4."Следует добавить проверки на null для методов, чтобы избежать ошибок выполнения"
Во всех методах постарался реализовать проверку на наличие некорректных передач аргументов. При добавлении задач не проверяю поле Description, т.к. считаю, что пользователь может оставить поле пустым, если захочет. Если это принципиально необходимо, то смогу в будущем поменять этот момент, но в задании таких тонкостей не указано, прошу не считать это ошибкой
5."В методе delEpicById, после удаления эпика, происходит удаление всех подзадач эпика, однако можно сначала удалить подзадачи, а затем сам эпик, что будет логичнее."
Полностью согласен!И это сразу укоротило код, благодарю.
ps Если Вам кажется, что я пытаюсь откуда-то всё списать, то это не так, я просто пытаюсь въехать и читаю про разные базовые функции, но в пределах прохождения тем, сильно не лезу