Repository navigation
Спринт 11 - Обновлена архитектура приложения - #2
Conversation
milayadasha
commented
Dec 25, 2025
- Разделение архитектуры на три слоя: контроллеры, сервисы и хранилища для каждой сущности (фильм и пользователь):
- контроллеры обрабатывают запрос и вызывают методы сервиса
- на уровне сервиса обработка сущностей, их валидация
- в хранилище логика по работе с объектами
- Добавлены новые методы по работе с фильмами (добавить лайк, убрать лайк, вывести самые популярные)
- Добавлены новые методы по работе с пользователями (добавить в друзья, убрать из друзей, вернуть всех друзей пользователя, вернуть общих друзей двух пользователей)
- Добавлены методы по возврату конкретного фильма/пользователя по id
- Добавлены новые тесты для нового функционала
- Добавлено доп. логирование
maks-avilow
left a comment
There was a problem hiding this comment.
Привет! В целом работа отличная. Но есть достаточно важный момент, который предлагаю доработать если получится
| * Возвращает фильм по id | ||
| */ | ||
| @GetMapping("/{id}") | ||
| public ResponseEntity<Film> getFilmById(@PathVariable int id) { |
There was a problem hiding this comment.
Дарья привет. очень хорошая работа, написанная достаточно чисто. но я бы хотел оставить довольно важное замечание. Ты можешь попробовать выполнить его в этой итерации или если будут сложности, тогда в следующих спринтах. Но в любом случае это своеобразный стандарт и так или иначе это необходимо. Так о чем я?
Мы никогда не отдаем энтити в контроллерах. энтити мы используем только для работы с бд. когда происходит маппинг между таблицами и нашими сущностями при работе с ооп. далее в слоях с бизнес логикой происходит маппинг энтити-дто. обычно он происходит с помощью кодогенерирующих библиотек например mapStruct. Но на первых порах можно использовать обычные геттеры и сеттеры. Соответственно в контроллере мы всегда(если что-то отдаем конечно) отдаем объект dto. Причин появления концепции dto несколько, советую дополнительно изучить для понимания вопроса. Поэтому:
Введи DTO (Data Transfer Object) для данных, передаваемых по API. Например, FilmDto, UserDto. Контроллеры должны принимать и возвращать DTO. во всяком случае отдавать точно dto
There was a problem hiding this comment.
Привет. Спасибо за обратную связь и ценное замечание! Я уточнила у наставника. Он сказал, что DTO мы будем подробно изучать в следующих темах. Если ты не против, то я отложу это исправление на будущее, чтобы не переделывать лишний раз. У нас в ТЗ иногда чётко пишут "Создай класс с таким-то названием".
Надеюсь, что тебе ок такой вариант)