Skip to content

Реализация задач ТЗ спринта 6#4

Merged
h0ttab merged 14 commits intomainfrom
sprint_6-solution
May 26, 2025
Merged

Реализация задач ТЗ спринта 6#4
h0ttab merged 14 commits intomainfrom
sprint_6-solution

Conversation

@h0ttab
Copy link
Owner

@h0ttab h0ttab commented May 26, 2025

Что было сделано

Согласно ТЗ финального задания 6-го спринта, в проект были внесены следующие изменения:

  • История просмотров задач больше не ограничена по размеру.
  • В истории больше не хранятся дубли (разные просмотры одной и той же задачи). Теперь хранится только один самый свежий просмотр для каждой просмотренной задачи.
  • Была полностью переработана логика и механизм хранения истории. В новой реализации используется комбинация из двусвязного списка и HashMap. Такой подход позволяет стабильно быстро удалять любые записи из истории просмотров, благодаря асимптотической сложности операции O(1).
  • Были добавлены новые, и обновлены существующие Unit-тесты.
  • В классе Main было выполнено дополнительное задание на реализацию пользовательского сценария.

Дополнительная информация:

Одно из заданий ТЗ звучит так: "С помощью сеттеров экземпляры задач позволяют изменить любое своё поле, но это может повлиять на данные внутри менеджера. Протестируйте эти кейсы и подумайте над возможными вариантами решения проблемы."

Моё решение:

  • Все сеттеры, кроме setId(int id) были удалены, т.к. они не используются, но потенциально дают доступ к изменению внутренних полей задач. Для таких изменений в классе InMemoryTaskManager предусмотрены соответствующие методы обновления задач/эпиков/подзадач.
  • Нет сеттеров = нечего тестировать, т.к. без сеттеров изменить приватные поля невозможно, благодаря ограничениям на уровне компилятора Java.
  • Единственный сеттер, который используется - это setId(int id). Его необходимо оставить публичным, т.к. это единственный способ обеспечить присвоение каждой задаче уникального ID, который создаёт отдельный класс-генератор. Наличие независимого внешнего генератора ID соответствует принципам разделения ответственности и декомпозиции кода.


import java.util.Objects;

public class Node<T> {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отлично, что использовал дженерики

@h0ttab h0ttab merged commit 4b85dbc into main May 26, 2025
1 check passed
@h0ttab h0ttab deleted the sprint_6-solution branch May 26, 2025 17:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants