Repository navigation
Выполнить задание 6 спринта - рефакторинг InMemoryHistoryManager - #2
Conversation
milayadasha
commented
Oct 8, 2025
- Преобразовать InMemoryHistoryManager в двусвязный список с мапой для хранения узлов
- Переделать метод добавления и получения истории, чтобы хранить только последнюю версию задачи
- Добавить в методы удаления задач удаление из истории
- Исправить методы get*byId для возврата копий задач
- Исправить метод getCopy для Epic, чтобы делать копию вместе со списком подзадач
- Добавить тесты для нового функционала
- Переделать Main файл для тестирования нового функционала
…бавлением соответствующих пользовательских сценариев и юнит-тестов.
maks-avilow
left a comment
There was a problem hiding this comment.
Дарья привет!
Ты отлично справилась с ключевой задачей этого спринта — реализацией эффективной истории просмотров с поддержкой дедупликации и удаления за O(1). Это непростая тема, особенно когда нужно совместить двусвязный список и хеш-таблицу
Что особенно хорошо получилось:
-корректная архитектура HistoryManager
-ты правильно реализовала InMemoryHistoryManager с использованием HashMap<Integer, Node> и двусвязного списка — именно так и должно быть, чтобы обеспечить константное время на добавление и удаление
-полное соответствие интерфейсу: все методы (add, remove, getHistory) реализованы в точности по ТЗ.
Тестовый сценарий в Main: ты не просто написала код, а проверила его в деле — создала задачи, эпики, подзадачи, проверил историю, дедупликацию и удаление. Молодец!
TaskManager и HistoryManager работают независимо, но согласованно — это признак хорошего проектирования. Небольшие замечания (на будущее):
- в InMemoryHistoryManager можно было бы обойтись без дополнительного копирования задачи (getCopy()), так как копия уже создаётся в менеджере. Но это не сломало логику — дедупликация работает корректно.
- лишний метод getTasks() в истории лучше убрать, чтобы не запутать других разработчиков — история должна возвращать задачи только через getHistory() и только в порядке просмотра.
Но учитывая, что все ключевые требования выполнены, а основная логика работает стабильно — работа принимается